STM32学习方法Word文档下载推荐.docx
《STM32学习方法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《STM32学习方法Word文档下载推荐.docx(20页珍藏版)》请在冰豆网上搜索。
习...............................................................
.....................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);
3、阅读lib
调试所有外设初始化的函数。
只需要知道外设在调试的时候,ewram需要从这个函数里面获得调试所需信息的地址或指针之类的信息。
只有一个函数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(&
amp;
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(唤醒)。
设定外部中断初始化函数。
按需求,不是必须代码。
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