返回列表 发新帖我要提问本帖赏金: 50.00元(功能说明)

[STM32F1] STM32F103VE_在线升级系统设计

[复制链接]
1424|1
 楼主| 电笔小新 发表于 2025-3-7 16:06 | 显示全部楼层 |阅读模式
#申请原创#
为了解决数字产品在升级程序时需要反复带电插拔烧录器,参考了网上很多BootLoader的程序例程,通过这个帖子记录自己一步一步搭建BootLoader升级框架。设计构思如下(控制芯片用的是STM32F103VE):
1、对flash划分为三个区域:
Flash.png
2、Flash运行流程如下:
程序框架.png
3、程序设计思路解释:Flash区域划分为BootLoader、UserCode、BackUp三个区域;通过烧录器下载BootLoader程序后,即可通过串口通信升级程序;在对UserCode程序升级完成后,会在UserCode_Verfy的地址上写上标识码代表已经有用户程序,同时把用户程序拷贝到BackUp区域;如此大费周章的设计BackUp备份区是非常有必要的,在升级UserCode区域代码的时候,如果出现掉线,由于升级前会把UserCode的所有程序全部擦除才能进行升级,这时候就出现了UserCode的程序不完整无法运行,机器就会变成砖头;增加了BackUp区域之后,BootLoader程序对UserCode_Verfy区域进行5次识**,就会对BackUp_Verfy区域进行识别,识别到有备份程序后,就会主动将备份程序拷贝回UserCode区域,从而实现了即使在升级过程出现异常,机器仍然能退回上一次存储的程序运行。
4、编程准备:
芯片型号:
芯片型号.png
内存地址分布:
芯片内存地址.png
通过资料查询,可以了解到STM32F103VE是一款100脚内存512K的芯片;
考虑到我们的程序存储量不会太大,对Flash划分如下:
内存分配.png
5、通过学习《STM32F10xxx闪存编程参考手册》
STM32F10xxx闪存编程参考手册.pdf (464.42 KB, 下载次数: 1)
对Flash擦除,程序如下:
Flash擦除.png
对Flash编程,程序如下:
flash编程.png
标识码的写入,程序如下:
标识码写入ng.png
程序的拷贝,程序如下:
代码拷贝.png
BootLoader处理UserCode和BackUp的识别:
BootApp.png
BootLoader跳转到UserCode的程序代码:
程序跳转函数.png
主函数入口:
主函数.png
6、升级测试
A.正常烧录升级流程:
烧录BootLoader
烧录BootLoader.png
在线串口升级
在线升级.png
Loader程序正常跳转到用户程序:
用户程序运行.png
B.烧录过程掉线测试:
升级掉线:
升级异常.png
备份区程序拷贝,重新运行:
程序拷贝.png
7、总结:通过方案设计,并测试验证,该在线升级方案可行。

打赏榜单

21小跑堂 打赏了 50.00 元 2025-03-27
理由:恭喜通过原创审核!期待您更多的原创作品~~

评论

申请原创也请 @21小跑堂 哦,以便更快更及时的审核您的原创文章  发表于 2025-3-27 16:50
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

16

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部