STM32学习方法.docx

上传人:b****5 文档编号:7161590 上传时间:2023-01-21 格式:DOCX 页数:20 大小:35.33KB
下载 相关 举报
STM32学习方法.docx_第1页
第1页 / 共20页
STM32学习方法.docx_第2页
第2页 / 共20页
STM32学习方法.docx_第3页
第3页 / 共20页
STM32学习方法.docx_第4页
第4页 / 共20页
STM32学习方法.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

STM32学习方法.docx

《STM32学习方法.docx》由会员分享,可在线阅读,更多相关《STM32学习方法.docx(20页珍藏版)》请在冰豆网上搜索。

STM32学习方法.docx

STM32学习方法

stm32入门系列教程

如何提高stm32的学习效率

(2010-04-08)

目录

第一章笔者的入门总结...............................................................

...............................2

1为什么要把时间花在“犹豫”

上?

..............................................................2

2看资料需要计划、耐心和速

度...............................................................

.......2

3学stm32必备开发

板...............................................................

.....................3

1.4熟悉开发板并试图写程

序..............................................................................3第二章入门方法

谈...............................................................

.........................4

1拿到开发板我该做什

么?

..............................................................................4+

1我的时间如何安

排...............................................................

...........................5

2.3碰到问题怎么

办?

..........................................................................................5第三章学习步

骤...............................................................

.............................6

1关于stm32文档学

习...............................................................

.....................6

3.230天上手stm32计

划...............................................................

..................7

1第1步:

熟悉调试软

件...............................................................

..........8

1第2步:

gpio编

程...............................................................

...............8

2开始全新的stm32深入研

究..............................................................9福州芯达工作室简

介...............................................................

.....................................9

第一章笔者的入门总结

每当我们在入门之前(arm是这样,dsp也一样),总会会有很多疑问,会有很多顾虑。

我们渴望知道学习stm32前景如何?

需要啥基础?

难不难?

适不适合我?

但是什么时候能心潮澎湃地、相当着急地开始学stm32?

日子在一天一天过去!

你开始行动了吗?

没有行动的思索,永远都不可能入门!

把这些时间用来看书吧,效果能好一万倍。

大家一般都是从51单片机过来的,回想一下,我们之前学单片机时如何入门呢?

实际上都是先看书(理论),再玩板子(实践)。

严格地说,应该是

模仿实验。

熟悉之后才会自己写程序代码实现某个功能。

因此,如果你正在咨询stm32;如果你正对stm32心潮澎湃;如果你想入门stm32;那么,从现在开始,不要犹豫了,不要想再详细地了解stm32的前景了。

做一个可能影

响你一生的决定吧!

不用咨询,不用兴奋,开始看书籍(文档)吧

人都是这么走过来的。

这里所谓的“资料”包括stm32书籍、文档。

因为stm32有个特点,datasheet很多都是中文的,有些同学就没有去买书籍,直接看stm32的用户手册,也是可以的。

但是不管看书籍还是文档,我们是需要计划的。

不是今天看3页,明天看5页。

一本书看了两个月,还在磨蹭。

请记住,你学的不是寂寞,是stm32!

看书或文档不是用来消遣时间的。

背水一战吧,给自己规定一个底线:

两周内把一定粗略地过一遍!

不要求都看懂,事实上,不可能都看懂。

但我们必须理解基本知识,对难度高的知识有一个印象,至少以后碰到问题的时候,我们会似曾相识,感觉在哪里见到过,于是翻资料上网找答案——带着问题的时候,效率才是超高的。

两周过去了,stm32的知识你过一遍了吗?

没看完?

那么,你应该考虑这些天中,你是否尽力了?

是否真的想学stm32?

或者还是看到stm32人气很高,也想跟下时髦?

是不是碰到问题没法解决就想放弃了?

现在是你做第二个决定的时候了,请决定你是否继续攻读stm32。

如果是一时冲动想跟时髦,请马上放弃——你已经浪费两周时间了,你还想再浪费14天吗?

如果想吃得苦中苦,方为人上人,ok,请继续往下看:

每个

稍微了解一些理论知识后,现在摆在你面前,有两条路:

第一,自己画pcb制板、焊接、调试。

第二,购买一套性价比高的开发板。

笔者之前做过几次pcb设计,而且当时在实验室可以报销所有费用,就自己做了一个pcb板。

建议有报销条件的同学自己设计一块板子学习。

毕竟2层pcb的设计不是很难。

无法报销的同学,可以选购一款开发板学习。

因为自己出钱制板,至少需要150元,加上芯片元件费用、液晶屏费用,可能制作最小系统也要约250元。

所以购买开发板还是比较合算的。

毕竟现在市场上的stm32开发板已经白菜价了。

这里不方便进行各个品牌stm32开发板的比较。

总之一句话,选购的开发板一定要性价比最高的,最实惠的,而不是最贵的。

实际上,大多数同学选购的开发板是用来学习的,不是用来项目开发的。

因此,能让你上手stm32,目的已经达到了。

这时的你,不能再停留在理论上了。

你现在的心情,应当是:

看到开发板,马上就有一种说不出的兴奋!

但是,心急吃不了热豆腐!

请耐心把厂家配套的开发板使用手册浏览一遍,熟悉你买的开发板。

按照使用手册,把开发板上的相关测试、操作步骤,都动手做一遍,你会发现,原来开发stm32是如此简单!

那么就让我们开始stm32的开发之路吧!

如何进行真正入门stm32,请看第二章《stm32入门方法谈》。

篇二:

stm32固件库学习方法

stm32学习教程

教程一

1、一共24个库,不可能都学,都学也没用。

主要学习来源是各种例程代码,固件库函数用户手册和参考手册。

具体学习方法是通读不同来源的程序,在程序中找到相关的函数库的应用,然后再阅读相关文档,有条件的实验。

对于内容的选择方面,根据入门内容和未来应用,将所涉及的范围精简到最低,但是对选择的部分的学习则力求明确。

,以下是按照自己的需求对程序库函数排列的学习顺序:

a、绝大部分程序都要涉及到的库——flash、lib、nvic、rcc,学习基础的跟简单应用相关比

用的部分,其它部分后期再返回头学。

b、各种通用但不必用的库——exit、mda、systic,通读理解其作用。

c、demo板拥有的外设库——gpio、usart,编写代码实验。

d、未来需要用到的外设库——tim、tim1、adc、i2c,spi,先理解待有条件后实验。

e、开发可靠性相关库——bkp、iwdg、wwdg、pwr

f、其它,根据兴趣来学。

2、阅读flash

芯片内部存储器flash操作函数:

对芯片内部flash进行操作的函数,包括读取,状态,擦除,写入等等,可以允许程序去操作flash上的数据。

基础应用1

flash时序延迟几个周期,等待总线同步操作。

推荐按照单片机系统运行频率,0-24mhz时,取latency=0;24-48mhz时,取latency=1;48~72mhz时,取latency=2所有程序中必须的.用法:

flash_setlatency(falsh_latency_2);

位置:

rcc初始化子函数里面,时钟起振之后。

基础引用2

开启flash预读缓冲功能,加速flash的读取。

所有程序中必须的。

用法:

falsh_prefetchbuffercmd(falsh_prefetchbuffer_enable);

位置:

rcc初始化子函数里面,时钟起振之后。

3、阅读lib

调试所有外设初始化的函数。

只需要知道外设在调试的时候,ewram需要从这个函数里面获得调试所需信息的地址或指针之类的信息。

基础应用1

只有一个函数debug。

所有程序中必须的。

用法:

#ifdefdebug

debug();

#endif

位置:

main函数开头,申明变量之后。

4、阅读nvic,系统中断管理

管理系统内部的中断,负责打开和关闭中断。

基础应用1,中断的初始化函数

包括设置中断向量表位置,开启所需的中断两部分。

所有程序中必须的。

用法:

如果定义了vect_tab_ram,则在ram中调试,没定义,在flash中调试。

voidnvic_configuration(void)

{

nvic_inittypedefnvic_initstructure;//中断管理恢复默认参数#ifdefvect_tab_ram

nvic_setvectortable(nvic_vectab_ram,0x0);

#else

nvic_setvectortable(nvic_vectab_flash,0x0);

#endif

//下面为中断的开启过程,不是所有程序必须的

//nvic_prioritygroupconfig(nvic_prioritygroup_2);

//设置nvic优先级分组方式

//一共有16个优先级,分为抢占式和响应式。

两种优先级所占有的数量由此代码确定。

//nvic_prioritygroup_x可以是0、1、2、3、4,分别代表抢占优先级有1、2、4、8、16个//和响应优先级有16、8、4、2、1个。

规定两种优先级的数量后,所有的中断级别必须在//其中选择,抢占级别高的会打断其它中断优先执行,而响应级别高的会在其它中断执行完//优先执行。

//nvic_initstructure.nvic_irqchannel=中断通道名;

//nvic_initstructure.nvic_irqchannelpreemptionpriorit=0;//抢占优先级

//nvic_initstructure.nvic_irqchannelsubpriorit=0;//响应优先级

//nvic_initstructure.nvic_irqchannelcmd=enable;//启动此通道的中断

//nvic_init(&nvic_initstructure);//中断初始化

}

5、阅读rcc:

时钟管理

管理外部、内部和外设的时钟,设置、打开和关闭这些时钟。

基础应用1:

时钟的初始化函数过程:

用法:

voidrcc_configuration(void)

{

errorstatushsestartupstatus;//等待时钟的稳定

rcc_deinit();//将时钟重置为缺省值

rcc_hseconfig(rcc_hse_on);//设置外部晶振

hsestartupstatus=rcc_waitforhsestartup();//等待外部晶振就绪

if(hsestartupstatus==success)

{

falsh_prefetchbuffercmd(falsh_prefetchbuffer_enable);//使能预取缓存

flash_setlatency(flash_latency_2);//falsh操作的延时

rcc_hclkconfig(rcc_sysclk_div1);//ahb使用系统时钟

rcc_pclk2config(rcc_hclk_div2);//apb2为hclk的一半

rcc_pclk1config(rcc_hclk_div2);//apb1为hclk的一半

rcc_pllconfig(rcc_pllsaource_hse_div1,rcc_pllmul_9);//pllclk=8mhz*9=72mhzrcc_pllcmd(enable);//启动pll

while(rcc_getflagstatus(rcc_flag_pllrdy)==reset)

{}//等待pll启动

rcc_sysclkconfig(rcc_sysclksource_pllclk);//将pll设置为系统时钟源while(rcc_sysclksource()!

=0x80)

{}//将pll返回,并作为系统时钟源

}

//rcc_ahbperiphclockcmd(ahb2设备1|ahb2设备2,enable);//启动ahp设备//rcc_apb2periphclockcmd(abp2设备1|abp2设备2,enable);//启动abp2设备//rcc_apb1periphclockcmd(abp1设备1|abp1设备2,enable);//启动abp1设备

}

6阅读exti:

外部设备中断函数

外部设备通过引脚给出的硬件中断,也可以产生软件中断,19个上升、下降或都触发。

exti0~exti15连接到管脚,exti线16连接到pvd(vdd监视),exti线17连接到rtc(闹钟),exti线18连接到usb(唤醒)。

基础应用1:

设定外部中断初始化函数。

按需求,不是必须代码。

用法:

voidexti_configuration(void)

{

exti_inittypedefexti_initstructure;//外部设备中断恢复默认参数exti_initstructure.exti_line=exti_line12|exti_line14;//设定所需产生中断的通道,共19个exti_initstructure.exti_mode=exti_mode_interrupt;//设置中断模式exti_initstructure.exti_trigger=exti_trigger_falling;//下降沿触发exti_initstructure.exti_linecmd=enable;//启动中断的接收exti_init(&exti_initstructure);//外部设备中断启动}

图中在第4步根据中断屏蔽寄存器中的设定判别发生了哪一个中断,然后将该信号发送给nvic(增强型可屏蔽中断控制器),nvic根据信号将相应的中断函数的地址赋予pc要调用的寄存器,这样cortex-m3将执行对应的中断函数。

用户在使用中无需通过头文件定义,在软件库3.1.2中的startup_stm32f10x_?

?

.s文件中对中断函数的地址进行了宏定义,用户只需根据startup_stm32f10x_?

?

.s中的ppp_irqhandler,在stm32f10x_it.c和stm32f10x_it.h中添加相应的voidppp_irqhandler(void)函数,并在.c中添加中断处理代码即可。

对于exti9_5_irqhandler和exti15_10_irqhandler中断用户需要在处理函数中通过itstatusexti_getitstatus(uint32_texti_line)来判别发生了哪一个中断,再进行相应的处理。

7、阅读dma

通过总线而越过cpu读取外设数据

通过dma应用可以加速单片机外设、存储器之间的数据传输,并在传输期间不影响cpu进行其他事情。

这对于入门卡法基本功来说,没有太大必要,这个内容先行跳过。

8、阅读systic:

系统定时器

可以输出和利用系统时钟的计数、状态

基础应用一,精确计时的延时子函数。

推荐使用的代码。

staticvu32timingdelay;//全局变量申明

voidsystick_configuration(void)

{

systick_countercmd(systick_counter_disable);//停止系统定时器systick_itconfig(disable);//停止systick中断

systick_clksourceconfig(systick_clksource_hclk_div8);//hclk作为时钟源,频率值/8systick_setreload(9000);//重置时间1毫秒,以72mhz为基础计算systick_itconfig(enable);//开启systic中断

}

voiddelay(u32ntime)//延迟一毫秒的函数

{

systick_countercmd(systick_counter_enable);//systic开始计时

timingdelay=ntime;//计时长度赋值给递减变量while(timingdelay!

=0);//检测是否计时完成systick_countercmd(systick_counter_disable);//关闭计数器

systick_countercmd(systick_counter_clear);//清楚计数值

}

voidtimingdelay_decrement(void)//递减变量函数,函数名由“stm32f10x_it.c”中的中断

//相应函数定义好了

{

if(timingdelay!

=0x00)

timingdelay--;

}

新手可用简化的延时函数代替:

voiddelay(vu32ncount)

{篇三:

stm32学习笔记

stm32学前班教程之四:

打好基础建立模板

1、新建目录project_iar4,按照自己的顺序重新组织dll(驱动);inc、src函数库;settings,其他所有文件全部放这个新建的目录下。

2、双击打开project.eww,继续更改内部设置。

3、需更改的内容列表:

位置和项目目标说明

project\edirconfignations新建基于stm3210b的配置编译目标和过程文件存放

project\option\generaloption\targetststm32f10x选择芯片类型

$proj_dir$\inc头文件相对位置,需要包括“map/lib/type”的位置

调试可选nonenone,low,medium,high是不同的代码优化等级

project\option\linker\output去掉overrridedefault输出格式使用默认

project\option\linker\extraoutput打开generalextraoutput去掉overrridedefault厂家要求

project\option\linker\config打开overrridedefault

$proj_dir$\lnkarm_flash.xcl使用flash调试程序,如果需要使用ram调试则改为lnkarm_ram.xcl

project\option\debugger\setup\driverthird-partydriver使用第三方驱动连接单片机

project\option\debugger\downloaduseflashloader下载到flash所需的设置

project\option\debugger\third-partydriver\third-partydriver\iardebuggerdriver$proj_dir$\ddl\stm32driver.dll驱动文件路径

注1:

所有跟路径相关的设置需要根据实际情况编写,相对路径的编写——“$proj_dir$”代表eww文件所在文件夹,“..”代表向上一层。

注2:

其他设置使用库函数里面的工程文件的默认选项即可,初学不用了解太多。

4、需要重新删除并重新添加project下“fwlib”和“user”的所有文件,为了删减外设模块方便需要在“user”额外添加“stm32f10x_conf.h”(不添加也可以,需要展开main.c找到它)。

然后执行project\rebuidall,通过则设置完毕。

5、完成以上步骤,第一个自己习惯的程序库就建立完毕了,以后可以从“stm32f10x_conf.h”中删减各种库文件,从“stm32f10x_it.c”编辑中断,从“main.c”编写得到自己的程序。

最后需要将这个库打包封存,每次解压缩并修改主目录名称即可。

6、我的程序库特点:

a)默认兼容st-link-ii,iarewarm4.42a,flash调试,其他有可能需要更改设置

b)为操作方便减少了目录的层次

c)为学习方便使用网友汉化版2.0.2固件,主要是库函数中c代码的注释。

后面随着学习深入将在我的模板里面加入如下内容:

d)加入必用的flash(读取优化),lib(debug),nvic(中断位置判断、开中断模板),rcc(时钟管理模板,开启外设时钟模板),gpio(管脚定义模板)的初始化代码,所有模板代码用到的时候只要去掉前面的注释“//”,根据需求填入相应值就可以了。

e)因为自己记性不好,所以m

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1