你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32F105RBT6开禁止读取flash,软复位看门狗复位都会引发HardFaul

[复制链接]
kingsong 提问时间:2018-2-28 13:15 /
        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和软复位不能同时用?


收藏 评论8 发布时间:2018-2-28 13:15

举报

8个回答
toofree 回答时间:2018-2-28 23:38:32
本帖最后由 toofree 于 2018-2-28 23:40 编辑

你是如何判断进入HardFault_handler中断的?
开启读保护后,是不能进入程序调试的,因为调试的时候,要读取Flash。并且也无法再次下载程序,需要在RAM中运行程序清除读保护才能再次下载。

贴个我用的读保护,在STM32F103CBT6上。
  1. int main(void)
  2. {
  3.   uint8_t  Count = 0;
  4.   if(FLASH_GetReadOutProtectionStatus() != SET)
  5.   {
  6.     //FLASH_Unlock(); //解锁FALSH,解不解锁都行
  7.     FLASH_ReadOutProtection(ENABLE);
  8.     NVIC_SystemReset();
  9.     while(1);
  10.   }

  11.   /* Configure the IWDG */
  12.   IWDG_Configuration();
  13.   /* Reload IWDG counter */
  14.   IWDG_ReloadCounter();
复制代码

另外说一句,看门狗和读保护,都是在程序调试没问题后才开启的。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

kingsong 回答时间:2018-3-1 10:54:39
谢谢回帖。软复位后,判断flash是否锁定之前的程序可以运行,之后的程序不能运行。
无薪税绵 回答时间:2018-3-1 17:10:00
本帖最后由 无薪税绵 于 2018-3-1 17:14 编辑

这是 stm32 的设计问题。
使用 @toofree 大神的代码,是没有问题的。


参考文章:使用STM32 ST-LINK Utility 设置读保护后不能运行
http://blog.csdn.net/dddxxxx/article/details/52194376
这里还有一篇文章:STM32 读保护功能和清除读保护功能设置
https://wenku.baidu.com/view/e086f59dc8d376eeafaa3116.html

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

kingsong 回答时间:2018-3-2 10:18:50
无薪税绵 发表于 2018-3-1 17:10
这是 stm32 的设计问题。
使用 @toofree 大神的代码,是没有问题的。

谢谢大神回复,断掉电源,从新上电问题没有解决!
无薪税绵 回答时间:2018-3-2 10:46:50
你试试,在软复位前加入:

  __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


toofree 回答时间:2018-3-2 15:24:16
kingsong 发表于 2018-3-2 10:18
谢谢大神回复,断掉电源,从新上电问题没有解决!

不知道你是什么情况,我的程序已经在产品中用了七八年了,一切正常。
kingsong 回答时间:2018-3-4 10:56:13
无薪税绵 发表于 2018-3-2 10:46
你试试,在软复位前加入:

  __set_FAULTMASK(1);

感谢回复!程序莫名奇妙的好使了,我在测试,看看能不能找到问题,发现问题我在回帖把问题原因写出来。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2 结帖奖励,厉害了楼主!

查看全部评分

kingsong 回答时间:2018-3-4 10:56:34
toofree 发表于 2018-3-2 15:24
不知道你是什么情况,我的程序已经在产品中用了七八年了,一切正常。

感谢回复!程序莫名奇妙的好使了,我在测试,看看能不能找到问题,发现问题我再回帖把问题原因写出来。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版