STM32 IAP固件升级跳转后卡死可能存在的原因

使用IAP固件升级,本质上就是代码地址的跳转,从bootload代码跳转到APP代码。

具体关于IAP升级的原理可自行查找资料。本贴主要说明一下,在开发过程中遇到的2个问题导致固件升级跳转后复位。

问题1:bootload跳转成功后,串口初始化卡死,导致看门狗复位。

分析:APP代码中需要清除bootload中外设的初始化,否则在APP中的初始化无法成功,而且STM32CubeMX生成的HAL,下层函数大部分都是while形式的,初始化不成功就会卡死,如果这个时候设置了看门狗,就会复位。

处理方式:在main函数第一行添加HAL_DeInit();清除外设初始化。

问题2:一旦bootload运行跳转函数之后,app区的代码不运行。

分析:我遇到的情况是由于bootload和APP两个代码的时钟源不匹配导致app不运行。bootload用了内部时钟,APP用了外部8M时钟。导致跳转到APP代码时运行到时钟配置就卡死,而时钟没配置成功就无法初始化IO口,也没法发出信号做出提示,看着像app区的代码不运行,但其实还是运行了的。时钟初始化不成功卡死,设置了看门狗,这个时候就会复位。

处理方式:有两种,任选其一即可。

1、将bootload和APP的时钟源配置成相同的。

2、APP区在main()最开始的位置添加HAL_RCC_DeInit();重新清除设置,并配置时钟参数。

猜你喜欢

转载自blog.csdn.net/weixin_39457767/article/details/130888149
今日推荐