赞
踩
STM32单片机在线升级,一般通过USART串口将编译后的新代码数据发送到单片机实现,有线、无线方式均可。
可以采用边发送边更新的方式,也可以采用“发送、存储、验证、更新”的方式,后者将数据存储在Flash中备份存储,所有数据发送完并检查确认无误后再更新到单片机,安全性更高,更具有应用价值。
有线方式系统通过 RS232/485 总线直接和电脑连接,通过串口直接向单片机发送更新数据。在无线升级方式中配有 GPRS 模块,通过 GPRS 无线网络连接到上位机服务器,在远程即可实现升级操作,不需要到现场,更加便捷,适用于设备安装分散或远距离的场合。
STM32单片机在线升级需要编写两个项目程序,分别固化在Flash主存储区的不同区域,其中一个项目程序是真正的应用程序代码(APP);另一个项目程序是Boot引导程序,用于引导程序启动。
Boot程序一般放置在Flash基地址处(0x0800 0000),一般分配整个存储页。因Boot程序较小,分配前20KByetes即可。
系统启动时先从0x0800 0004取出IAP程序段的复位中断向量,在执行完IAP复位中断服务函数后跳转到IAP程序的main函数。在IAP的main函数中判断跳转到哪个区域并执行相应操作,然后跳转到APP的复位向量表,APP复位中断指向完后,最终跳转到APP的main函数。
但在APP的main函数执行过程中,若有中断发生,PC指针仍跳转到0x08000004地址中断向量表,然后根据APP设置的中断向量表偏移量跳转到APP对应中断服务程序执行,执行完后返回到APP的main函数,因此需要在APP程序中设置中断向量表偏移量,利用STM32库函数NVIC_SetVectorTable。
在升级时需要用到应用程序项目生成的.bin格式文件,可由.hex文件通过编译工具得到。
升级数据的接收在APP程序中完成,通过“升级标志”通知Boot程序,APP准备好升级数据后强制系统重启,在Boot中完成程序更新。因备份寄存器(BKP)在系统复位时不会改变,“升级标志”可使用BKP实现。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。