我的STM32 IAP BOOT跳转到APP进入HardFault_Handler解决方案

        客户要求实现OTA功能,于是程序分BOOT和APP,因需要添加一个浮点型全局变量gfHtTmpValue,发现只要调用这个全局变量,BOOT跳转APP后,APP初始化外设结束进入HardFault_Handler,把BOOT去掉,直接跑程序,完全没问题,太奇怪了……。

根据帖子https://www.amobbs.com/forum.php?mod=viewthread&tid=5694045&highlight=IAP%2B%E4%BB%BF%E7%9C%9F

仿真调试,结果发现仿真时居然没问题!!搜了下关于BOOT跳转APP进入HardFault_Handler解决方案,大多建议BOOT先关闭全局中断,APP再开全局中断解决,尝试上述方式,问题依旧。

        没办法了,试一下吧,修改Keil优化等级3级到0级,0级APP可以正常运行,太诡异……。

为了赶时间交样品演示,先修改Keil优化等级到0级,应付下吧;结果还是没应付得了,调试NTC温度采集发现温度数据始终不变!!!(ADC采集通过DMA方式,DMA长度3,ADC3通道,分别是电池电压Vbat、NTC电压Vntc、STM32内部基准电压Vrefint,ADC采集顺序依次如上所述排序)Log信息显示采集到的ADC数据错位了:Vrefint、Vbat、Vntc,也就是说NTC电压实际是Vbat,难怪温度数据始终不变。

        怀疑是不是Keil编译时搞了什么鬼,于是找来陈年旧货EWARM-CD-6701-5794,新建工程遇到问题解决见上一帖子,为什么不用新版IAR,因为太占空间啦。烧录运行后问题出现转机!!!,重新上下电,DMA过来的ADC数据概率性错误,对,就是这个概率性让我想到了会不会是BOOT搞的鬼呀,于是修改BOOT,BOOT跳转APP之前关全局中断、关ADC采集、关DMA,结果问题搞定了!!!

总结:BOOT跳转APP之前关闭中断,关闭DMA。

本人手记,用作备忘,他人不解请提问,尽量回答。

你可能感兴趣的:(ST,MCU)