一、背景

上一篇记录了用官方IAR的例程改了一下,实现通过串口升级程序。而实际我现在要实现的是通过腾讯云的OTA来升级程序,所以再记录一下如何实现。

上篇文章链接

STM32+Cubemx+腾讯云OTA(一)Bootloader①-CSDN博客

二、Cubemx生成工程

偷懒,直接用上一篇的工程

三、分配各区空间

首先参考一下我上一篇修改的bootloader程序,打开map:

这里是26k,所以我暂定给新的bootloader 32k

然后APP区,我是打算先做有APP1和APP2,考量是这种双备份的方案,在升级期间,一个应用程序可以更新, 另一个可以保持原始版本。在出现发生电源故障或通讯错误这种情况时,可以回滚到原始版本,保证设备的正常运行。

暂定APP1为110K APP2为110K,自定义区为4K

但是,如上图,由于我的程序都是加入了FreeRtos系统,所以都会比较大,这里只是一个简单的数据上报云后台的程序,已经快128K了,那我上边的分区就满足不了。

实际在我接触过的项目上,一般256k的芯片,都不会再在芯片的内存再分app1和app2,通常都是外接一个flash芯片用来存放下载的程序,通过校验后再替换到APP区。

但没关系,我这里先继续这样分,先用小一点的程序来实现,后续再用外接的flash芯片或者其他方法再来解决比较大的程序。

如下:

四、程序编写思路

这里我的主函数是一直在循环检测Update_Flag,我看有的程序是只上电的时候检测一次,这里应该没有什么区别:

其实跟例程一样,就是把ymodem换成MoveCode,检测到Update为0xAA,则将APP2区复制到APP1区,再跳转到APP1区的地址启动。

到后边再编写一个基于腾讯云OTA的程序来测试一下。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐