常见泽1 发表于 2018-1-18 11:34

STM32远程升级



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

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

除非按复位键

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

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

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


zmsxhy 发表于 2018-1-18 14:34

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

你也可以不用软复位,直接通过地址跳转。就向boot跳转到APP一样。不过不建议。

ljj3166 发表于 2018-1-18 15:37

1.λapi3.5nvicResetλbootУ

2.bootappжλ

ljj3166 发表于 2018-1-18 16:04

1.旧版函数库nvic类的reset函数(叫啥忘记了)可以起到复位的作用,复位后可以进入boot程序。
2.安排好中断向量,应该是可以实现的,不过最好能用复位撒。

LSJ.Micro 发表于 2018-1-18 22:37

(1)库里的这两个函数我没用过也不知道能不能达到软件复位的效果,但其实直接看STM32的参考手册就可以知道如何设置寄存器达到软件复位的效果,当然,你也可以去看库手册。
(2)不通过在RST引脚上产生低电平来达到从App跳转到Bootloader方法有两种,
1、通过函数调用,直接将Bootloader开始处的地址强制转化成函数指针来调用(此方法需要重新设置堆栈指针,其实不设问题也不大);
2、通过内联汇编,使用C内联汇编代码直接设置PC指针的内容为Bootloader的起始地址。
其实上面的两种方法本质上来说是一种,都是通过改变PC指针的内容来达到目的,只不过一个会涉及到栈指针的变化一个不会。

lqwuliang 发表于 2025-1-5 15:34

专门学习升级的开发板,可以看看https://item.taobao.com/item.htm?ft=t&id=868808663874&spm=a21dvs.23580594.0.0.3b5d645eWKB4bR
页: [1]
查看完整版本: STM32远程升级