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

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

根据帖子分享IAP更新程序时,FlashAPP无法仿真的方法 (amobbs.com 阿莫电子论坛)

仿真调试,结果发现仿真时居然没问题!!搜了下关于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数据概率性错误而不是Keil4编译的必现问题,对,就是这个概率性让我想到了会不会是BOOT搞的鬼呀,于是修改BOOT,BOOT跳转APP之前关全局中断、关ADC采集、关DMA,结果问题搞定了!!!

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

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

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值