
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、stm32f10x在应用中编程的实现方法-m3是首款基于v7-m体系结构的32位标准处理器,risc结构,包含高效灵便的thumb-2命令集,拥有杰出的低功耗特性,为微控制器系统、汽车车身控制系统、工业控制系统和无线网络等应用量身设计。st公司推出基于cortex-m3内核的系列处理器,凭借其出众的性能、创新的外设、优越的功耗控制,得到众多工程师的青睐。针对嵌入式应用的特点,stm32处理器提供功能强大的硬件调试接口jtag接口和串行接口,极大便利了设计,缩短了产品的开发周期。不仅如此,stm32处理器内嵌的闪存存储器允许在编程(in-circuit pro-gramming,icp)和在应用
2、中编程(in-application program-ming,iap)。利用在应用中编程,仅需通过一根串口线,就可以完成产品固件的更新。本文对stm32处理器的在应用中编程举行了具体的分析,结合硬件和驱动给出了iap的详细实现办法,稍加修改,便可应用于stm32处理器的全部系列产品。1 stm32f10x处理器11 stm32处理器特点stm32全系列处理器具有脚对脚、外设及软件的高度兼容性。这给应用带来很好的灵便性,易于将应用升级到不同存储空偶尔不同封装的平台。stm32处理器的产品全系列兼容,使得项目之间的代码重用和移植很便利。12 stm32处理器内存映射cortex-m3的存储系统采
3、纳统一编址的方式,程序存储器、数据存储器、寄存器被组织在4 gb的线性地址空间内,以小端格式(little-endian)存放。内存映射1所示。在代码区,0x00000000地址为启动区。上电以后,cpu从这个地址开头执行代码0x08000000为用户flash的起始地址,0x1ffff000为系统存储器(system memory)的起始地址。对于stm32处理器,可以通过配置boot0和boot1两个引脚来挑选不同的启动模式,如表1所列。cpu在时钟信号的第4个升高沿锁存boot引脚的值,按照两个引脚的值将对应的存储器物理地址映射到启动区。系统存储器也称为“大信息块”,有2 kb的容量。全
4、部上市的stm32处理器,在出厂前已经烧写进去自举模式下的启动程序(bootloader),并且将之锁定防止用户擦写。通过配置boot0和boot1挑选系统存储器启动,相应的启动程序在复位后得以执行,协作pc端的通信软件,通过usart1口允许用户将程序烧写到用户flash区。之后,将boot0和b00t1重新配置为用户flash存储器启动,进入正常的应用程序。上述的自举模式类似于isp编程,相比其他烧写方式便利许多,但真正便利灵便的是在应用中编程(iap),只需一根串口线就可以载入程序,复位后立刻执行新的应用程序。2 iap功能原理在应用中编程(iap)使得用户可以在程序运行时重新对flas
5、h举行编程。容易地说,iap的编程工作是:下载编译好的二进制文件数据到ram;将数据重新编程到特定的flash区。这两个工作是由iap驱动程序完成的。用法iap功能后,系统的固件由2部分组成:第1部分是iap驱动,不执行通常的功能,而是通过微控制器支持的任一种通信管道(如、usart、spi等,本文用法usart)接收数据,并执行对第2部分代码的更新;第2部分是真正的应用程序代码,实现详细的功能。这两部分代码共同烧写在flash中。要注重的是,这两部分代码不能重叠,否则无法实现iap功能。系统上电以后,iap驱动首先运行,它主要执行如下的操作:按照硬件信号或软件条件推断是否需要对第2部分代码举
6、行更新;假如不需要更新,则跳转到;执行更新操作;跳转到第2部分代码执行。stm3210x处理器iap驱动的流程2所示。图中显示iap主界面是利用超级终端实现的,传输协议用的是ymodem协议。需要注重的是,因为iap驱动占用了用户flash区的一段起始空间,因此flash的可编程最大空间要把这部分除去。3 iap功能实现31 硬件电路采纳stm32f10x型处理器作为核心。该处理器可全速工作在72 mhz,拥有3个usart接口,内嵌128 kb flash和20 kb sram。flash是以页的形式组织的,擦除1页的时光约为2040 ms;在囫囵工作范围内其擦除次数可达10 000次,经1
7、0 000次擦除后,在+55的保存环境中数据保存期限仍可达20年。用户彻低不必不安用法了iap功能后对产品造成不良影响。iap驱动用法usart1口作为通信管道,pb口的第9引脚作为iap推断是否进入iap功能的信号线。引出一个按键,作为iap功能挑选按键,只要在上电或复位时按住此键就会进入iap功能主界面,否则挺直执行正常应用程序。boot0和boot1是启动配置跳线。相应的硬件电路分离3、图4和图5所示。32 iap驱动iap驱动主要包含如下源文件。mainc:完成flash解锁、按键端口初始化、按键推断、usart1的初始化以及处理器的始终初始化,另外还初始化指针和跳转到应用程序处语句。
8、然后从commonc执行主菜单。commonc:显示主菜单。主菜单上显示一系列操作,如加载二进制文件、执行应用程序以及禁止写庇护(假如事先flash被写庇护)。downloadc:等待用户挑选传送文件操作,或者放弃操作以及一些提醒信息,但真正实现传送的是ymodemc源文件。ymodemc:负责从超级终端接收数据(用法ymodem协议),并将数据加载到内部ram中。假如接收数据正常,则将数据编程到flash中;假如发生错误,则提醒出错。33 软件实现要实现iap功能,还需做一些预备工作:要预备bin类型的代码文件。开发环境用法的是,默认状况下keil生成hex类型的编译文件。利用keil自带的
9、fromelfexe工具,就可以生成二进制文件。对超级终端举行设置。iap驱动中对usart1的设置为:波特率为115 200 kbs,8位数据位,1位停止位,无校验位和硬件控制。超级终端也必需保持相同设置。iap驱动和应用程序代码需要分配在flash的合适位置。图6是2部分代码在flash中的存储状况。因为iap驱动代码占用8 kb的空间,故而将flash最初的8 kb划出来,应用程序是从0x08020000地址处开头存放的。这是通过在commonh头文件中语句定义的:define applicationaddress 0x08020000也可以定义在其他0x08020000地址后的任何位置
10、,只要保证应用程序大小不超过所用处理器flash的容量。在platform_config.h头文件中有定义flash的语句:define page_size(0x400) flash页大小为1 kbdefine flash_size(0x20000)flash容量为128 kbstm32f10x处理器有2种flash页的大小:1 kb和2 kb。通过以上语句即可定义页大小。在platform_configh头文件中还定义了进入iap功能挑选按键映射引脚:iap驱动在keil中编译、链接后,利用arm公司的realview ulink2器将生成的hex文件烧写到flash中。此时keil自带的f
11、lash烧写工具要设置flash的起始地址为0x08000000。在应用程序中,定义向量表的函数nvic_setvectortabl(nvic_vecttab_flash,0x2000)中的第2个参数,即flash的偏移量一定要设置成0x2000或更大的数值。同时,flash烧写工具也要做相对应的设置。将系统的串口与pc机串口相连,打开已经设置好参数的超级终端。将boot0跳线为0,boot1为0或1都可以。按住iap功能挑选按键,给系统上电。此时,在超级终端就会显示iap功能主界面,7所示。在键盘上按1挑选待载入二进制文件,界面上会浮现提醒语。在“传送”菜单中挑选传送文件后,只需几秒钟可以将6 kb左右的文件烧写到flash。下载完后,在键盘上按2或复位就可以挺直执行应用程序了,8所示。虽然iap功能用法的是usart1口,但进入应用程序后就可以正常用法usart1口。随时可以通过复位后按住iap功能
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论