用STM32F103C8T6的做IAP时,在跳转时一直进入HardFault_Handler 解决方法,当其它方法无效时,可以看看此方法

在本论坛上下载了很多资料,对我帮助很大。平时项目很忙,没来写过文章,今天使用STM32F103C8T6做IAP时遇到了一个问题,每次下载完APP程序,一运行就进入HardFault_Handler。偶尔能正常运行,如果正常时,连续多次测试都正常。再用其它程序测试一运行就进入HardFault_Handler,再用这个测试好的程序试HardFault_Handler。更换新的STM32F103C8T6芯片,还是一样。修改程序在STM32F103VBT6上测试,一切正常(没有长时间测试)。根据多年编程经验,应该是个小问题,就是找不到原因,研究了4天,查阅很多资料,尝试了很多网友给的方法,都没能解决。但是给了我很大的启发,怀疑问题还是出在写Flash。

先说解决办法程序代码是在CSND下载的别人的程序,使用的是正点原子的程序模板,可是一运行就进入HardFault_Handler。相信大多数朋友用的都是这个模板。解决问题的方法很简单:看下图在第38行加入一条指令:FLASH_ErasePage(WriteAddr);即可。

 

期间查阅很多文档,比如IAP实现原理、HardFault定位步骤、STM32 写Flash进入HardFault_Handler,一次解决经验分享、用STM32F103C8T6的做IAP时,在跳转时一直进入HardFault_Handler 解决方法  等等,这些都是非常好的文章,解决问题的过程太长了,我就不啰嗦了。无奈都没有解决我的问题。

尝试多种方法:1、在主程序中擦除需要使用的扇区。2、在主程序中擦除FLASH_APP1_ADDR以后的全部扇区。都不行,而且程序在写入Flash时也做了检测,非空时都要先擦除,还是不行。在函数void STMFLASH_Write_NoCheck(u32 WriteAddr,u16 *pBuffer,u16 NumToWrite) 内执行擦除扇区,就可以,我也不知道到为什么。有知道的朋友可以告诉我。

在这里给大家一个提示:APP程序2kByte多,前1kB写入Flash每次都成功,后1kB多都是失败。在这里加入擦除扇区后,全部写入成功,程序正常使用。

如果该方法可以解决你的问题,请多多支持。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值