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

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个回答
七哥 回答时间: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


七哥 回答时间: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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版