本帖最后由 搬砖工小王 于 2022-5-7 09:34 编辑
APM32F072在线升级的实现
虽然APM32F072有提供ISP实现程序通过Uart口进行程序烧录,只要在应用程序中跳转到0x1FFFC800即可,同样不需要改变boot脚的电位就可以完成通过Uart口进行程序升级。但是这样不便于我们按需定制的在线升级过程。所以我们还是通过自定义bootloader和app的方式来实现。
首先我们需要对bootloader和app大小进行分配。
Bootloader 4k IROM的配置如下
APP 124k IROM的配置如下
剩下的一些flash区域用来存储一些参数和在线升级的标志位
Bootloader中只需要加入这部分代码,就可以实现跳转,跳转前注意要关闭所以中断即可
为了让BootLoader能识别是否进人程序升级还是跳转到正常app运行,我通过了一个标志位FlagOnlineUpdate来进行判断,如果不为0x5AA5就进行在线升级,升级完成后改FLASH位置会变为0x5AA5。
App如果需要进行在线升级只需要把FLAGUPDATE_ADDR处的flash的值0x5AA5擦除后,通过NVIC_SystemReset进行复位即可进入到BootLoader进行程序升级了
App需要注意的就是需要修改中断向量表的偏移地址。不然中断触发的时候中断还会回到BootLoader中,无法正常运行app这边工程的中断函数。
|