[讨论] STM32远程升级

常见泽1   2018-1-18 11:34 楼主
40F0f8AQ+p7LfD0BIMAAAAASUVORK5CYII=

今天看了STM32远程升级方案  要用GPRS远程升级

现在用网上的历程搞了串口IAP
先在开发板上烧写bootloader固件
然后通过串口烧写应用固件
首次没问题
但是如果在下载就不可以了

除非按复位键

两个问题请教下
(1)我直接调用库函数复位可不可以
nvic_setfaultmask();
nvic_generatesystemreset();
这两个库函数以前在NVIC里面,新库还没找到他们的影子

这也就意味着我接收到升级指令后,要软件复位

(2)如果不用软件复位,有没有办法跳到BOOT去 升级应用固件呢?


回复评论 (4)

那说一下,最近玩了一下远程升级,不过没用过库,不太清楚库是如何做的。简单说一下自己的想法。
1. 如果是在APP里,那么需要复位到boot内,如果在boot内,直接升级。
2.升级后判断APP是否正常,正常的跳转到APP运行,不正常的需要发出告警。
3.boot和APP程序注意地址映射。

你也可以不用软复位,直接通过地址跳转。就向boot跳转到APP一样。不过不建议。
我在想 我知道什么
点赞  2018-1-18 14:34
1.λapi3.5nvicResetλbootУ

2.bootappжλ
So TM what......?
点赞  2018-1-18 15:37
1.旧版函数库nvic类的reset函数(叫啥忘记了)可以起到复位的作用,复位后可以进入boot程序。
2.安排好中断向量,应该是可以实现的,不过最好能用复位撒。
点赞  2018-1-18 16:04
(1)库里的这两个函数我没用过也不知道能不能达到软件复位的效果,但其实直接看STM32的参考手册就可以知道如何设置寄存器达到软件复位的效果,当然,你也可以去看库手册。
(2)不通过在RST引脚上产生低电平来达到从App跳转到Bootloader方法有两种,
1、通过函数调用,直接将Bootloader开始处的地址强制转化成函数指针来调用(此方法需要重新设置堆栈指针,其实不设问题也不大);
2、通过内联汇编,使用C内联汇编代码直接设置PC指针的内容为Bootloader的起始地址。
其实上面的两种方法本质上来说是一种,都是通过改变PC指针的内容来达到目的,只不过一个会涉及到栈指针的变化一个不会。

点赞  2018-1-18 22:37
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复