stm32怎样实现一边正常运行,一边串口接收程序升级数据?

2019-07-24 12:28发布

搞了台别人家的设备。测试了下在线升级功能:
串口分了300多包把要升级的程序数据传输到设备里面,然后点击“升级”,设备一眨眼(重启)更新程序了~~~

芯片STM32F030,flash为64K
要升级的APP程序量大概54K

因为flash大小的限制,肯定是不能同时存储2份APP程序的,
那么问题来了:
到底是怎样实现程序的所有功能都能正常运行(显示、保护动作、串口通信等等),一边串口还在接收要写入Flash的程序数据的呢??
接收到的50多K的数据,及时用缓存,也不可能有这么大的RAM用来缓存啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
美丽的时光机器
1楼-- · 2019-07-25 17:25
edmund1234 发表于 2018-9-3 17:01
当你确定了要升级后, 是不是最少有四个任务?

一) 通过USART接收数据到RAM

第3步:烧录是需要该启动文件吗?
还有第2步:查错是判断是否接收完整吗?
edmund1234
2楼-- · 2019-07-25 20:30
美丽的时光机器 发表于 2018-9-3 17:28
第3步:烧录是需要该启动文件吗?
还有第2步:查错是判断是否接收完整吗?

第三步, 不需要, 打开StdPeriph_Driver, 找flash.c 看看里面的内容, 就该知道怎样烧录(重写)falsh
第二步, 任何通信接收到的数据都可能会出错, 所以必定会有查错(校验)的方式, 简单如CheckSum, 复杂如CRC。。。。。等等

你的RAM是不可能一次过把整段更新代码都收下来, 所以要分段收, 然后写到Falsh, 之后再收二段。。。。。。
323232
3楼-- · 2019-07-26 02:03
老哥..  bootloader了解一下...
美丽的时光机器
4楼-- · 2019-07-26 02:32
 精彩回答 2  元偷偷看……
a3748622
5楼-- · 2019-07-26 05:00
edmund1234 发表于 2018-9-3 17:45
第三步, 不需要, 打开StdPeriph_Driver, 找flash.c 看看里面的内容, 就该知道怎样烧录(重写)falsh
...

一次过,活抓一个广东银
jermy_z
6楼-- · 2019-07-26 07:04
BootLoader+APP1+APP2可以实现你的需求

BootLoader不多讲了,常见的说法
APP1是你正常的程序
APP2是你需要升级的程序
两个APP的好处是当升级失败了,还可以把正常的程序拷贝回去

一周热门 更多>