请教下 STM32F105 IAP的问题

2019-12-19 18:05发布


如下图所示,为main()函数里面内容,省略了前面的初始化,
QQ截图20180427193547.jpg (25.9 KB, 下载次数: 0) 下载附件 2018-4-27 19:51 上传

我从BOOT可以跳转到APP,在BOOT中也可以升级,

但是发现从APP跳转到BOOT后,可以初始化,0x58数据能发送,但是 while(1)程序无法运行,现象类似死机;

单独运行BOOT程序是没有问题的

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
saccapanna
1楼-- · 2019-12-19 20:38
app 进去 boot ,最好直接触发复位,这样相当于boot全新运行。跳转过去,要注意很多细节,比如可能全局变量没有初始化,或者中断没关等,都可能会导致问题。
isakura
2楼-- · 2019-12-19 23:30
请高手指点下,大概是哪里问题?
huangguimina4
3楼-- · 2019-12-20 05:24
 精彩回答 2  元偷偷看……
isakura
4楼-- · 2019-12-20 05:33
huangguimina4 发表于 2018-4-27 22:46
全局中断开了吗?

还真有可能是这个问题,

查找了下,只在跳转的时候  __set_FAULTMASK(1);  关闭了

跳到BOOT后没找到打开的地方;
isakura
5楼-- · 2019-12-20 07:21
saccapanna 发表于 2018-4-27 23:22
app 进去 boot ,最好直接触发复位,这样相当于boot全新运行。跳转过去,要注意很多细节,比如可能全局变量 ...

我也刚想问这个问题

比如,在APP中开了其他的定时器 及 SPI 等,然后 关中断,跳到 BOOT,开中断

在BOOT中, NVIC_Configuration()  又 没设置那些话,那么 会造成 错误导致 跑飞 那些 吗

===============

还有,如果 APP 跳到 BOOT中再复位的话,那么可不可以   不跳转,直接在 APP 中复位呢 (我用flash保存了一个状态值,可以判断是 升级APP 还是直接 运行APP)

哪种方式更好?
isakura
6楼-- · 2019-12-20 11:06
saccapanna 发表于 2018-4-27 23:22
app 进去 boot ,最好直接触发复位,这样相当于boot全新运行。跳转过去,要注意很多细节,比如可能全局变量 ...


就是直接将 以下 程序

if (((*(vu32*)IAP_StartAddress) & 0x2FFE0000 ) == 0x20000000)
         {
              // Jump to user application
              JumpAddress = *(vu32*) (IAP_StartAddress + 4);
              Jump_To_Application = (pFunction) JumpAddress;
              //Initialize user application's Stack Pointer
              __set_MSP(*(vu32*) ApplicationAddress);
              Jump_To_Application();
         }

换成 复位的程序

        __set_FAULTMASK(1);//- 关闭所有中断
        NVIC_SystemReset();//复位-升级完成- 系统复位
        __DSB();

一周热门 更多>