新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > STM32F103系列微控制器在应用编程技术研究

STM32F103系列微控制器在应用编程技术研究

作者:时间:2013-10-29来源:网络收藏
2 软件完成的IAP方案
该方案是在主程序前添加一个简单的Bootloader程序,用该程序来判断是否进行软件更新。Bootloader程序的主要编程思路如图4所示。

d.JPG


该方案的原理是:芯片启动时将从FLASH的0x8000000地址开始执行程序,Bootloader程序也要写在地址0x8000000处,在Boot loader程序中通过判断标志位的值来判断是否直接进入主函数,判断标志位的值存放在的FLASH中避免标志位丢失。主程序的位置在Bootloader程序所占用的地址空间之后,具体地址要由Bootloader程序的大小来决定。
更新主程序的过程就是将以前的主程序覆盖掉。Bootloader程序、主程序以及更新标志位的地址位置及加入Bootloader程序后,主程序的中断工作过程如图5所示。

e.JPG


Bootloader程序被放在芯片启动后读取的第一个地址0x8000000上,依次按照地址排下来是Bootloader的中断向量表、Bootloader的主程序。在IAP主程序之后0x8000000+X处放置更新标志位temp。在更新标志位后0x8000000+X+M处地址开始主程序。
主程序的中断响应过程为:中断发出中断请求,中断请求根据的硬件机制会到0x8000000后的中断向量表进行中断的响应,但主程序有自己的中断向量表,所以在主程序的main()函数开始时要偏移中断向量表,使中断响应时按照主程序的中断向量表进行。
由上述分析可以得出编写主程序的三个注意事项:
首先,在主程序编译前需要先将程序的启动地址设置为Bootloader写入的地址,例如在RVMDK软件中设置芯片的启动地址为0x8000000,但主程序写在0x8004000的位置,所以需要将主程序的启动地址改为0x8004000。
其次,就是在main()函数中设置偏移中断向量表,如下面的程序所示,在主程序开始时偏移中断向量表。
f.JPG
最后,使用IAP下载的更新程序的格式最好为.bin文件,但不能是.hex文件,可以使用fromelf这一类的工具将.hex格式文件转换为.bin文件。

3 蓝牙串口模块完成的无线IAP方案
该方案主要由图6所示的几个部分组成,STM32F103的其中一个串口与蓝牙串口模块相连接。蓝牙串口模块支持SPP蓝牙串口通信协议,即使用蓝牙替代串口线,通过无线的方式进行串口通信。上位机是一台PC机,负责给嵌入式产品下载更新软件,PC机需要通过一个蓝牙适配器与嵌入式产品的蓝牙串口模块进行蓝牙数据传输。

g.JPG



评论


相关推荐

技术专区

关闭