stm32F105RBT6开禁止读取flash,软复位看门狗复位都会引发HardFault_handler中断,关闭禁止读取flash则能正常复位,求教问题及解决原因。 程序如下: flash锁定程序: if(FLASH_GetReadOutProtectionStatus()!=SET) { FLASH_Unlock(); FLASH_ReadOutProtection(ENABLE); } 软复位程序 NVIC_SystemReset(); // 软复位系统 喂狗程序 void IWDG_ReloadCounter(void) { IWDG->KR = KR_KEY_Reload; } 猜测:锁flash和软复位不能同时用? |
你是如何判断进入HardFault_handler中断的?
开启读保护后,是不能进入程序调试的,因为调试的时候,要读取Flash。并且也无法再次下载程序,需要在RAM中运行程序清除读保护才能再次下载。
贴个我用的读保护,在STM32F103CBT6上。
另外说一句,看门狗和读保护,都是在程序调试没问题后才开启的。
评分
查看全部评分
这是 stm32 的设计问题。
使用 @toofree 大神的代码,是没有问题的。
参考文章:使用STM32 ST-LINK Utility 设置读保护后不能运行
http://blog.csdn.net/dddxxxx/article/details/52194376
这里还有一篇文章:STM32 读保护功能和清除读保护功能设置
https://wenku.baidu.com/view/e086f59dc8d376eeafaa3116.html
评分
查看全部评分
谢谢大神回复,断掉电源,从新上电问题没有解决!
__set_FAULTMASK(1);
NVIC_SystemReset();
// __set_FAULTMASK(1); 是关闭所有中断的意思,
//目的是在执行NVIC_SystemReset();
//复位函数过程中不被中断所打断。
看看软复位能否正常。
NVIC_SystemReset()调用后跳到HardFault_Handler()的处理办法:
http://bbs.21ic.com/icview-780542-1-1.html
STM32进入HardFault_Handler处理办法:
http://blog.csdn.net/u012075442/article/details/50931354
不知道你是什么情况,我的程序已经在产品中用了七八年了,一切正常。
感谢回复!程序莫名奇妙的好使了,我在测试,看看能不能找到问题,发现问题我在回帖把问题原因写出来。
评分
查看全部评分
感谢回复!程序莫名奇妙的好使了,我在测试,看看能不能找到问题,发现问题我再回帖把问题原因写出来。