码迷,mamicode.com
首页 > 其他好文 > 详细

独立看门狗 IWDG

时间:2019-06-02 18:05:54      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:The   set   没有   write   超时   错误   from   cmd   adc   

一,独立看门狗

 

技术图片

二,独立看门狗的时钟源

技术图片

独立看门狗拥有自己的时钟源,不依赖PLL时钟输出的分频信号,能够独立运行,这样子的好处就是PLL假如受到干扰,

导致运行异常,独立的看门狗还能正常地进行工作,如果没有正常的喂狗动作,就复位CPU。

三、程序设计

 

1.     添加复位检测代码,有助于观察当前工作的可靠性

 

   /* Check if the system has resumed from IWDG reset,检查当前复位是否有独立看门狗导致 */
         if (RCC_GetFlagStatus(RCC_FLAG_IWDGRST) != RESET)
         {
                   /* IWDGRST flag set */
                   printf("iwdt reset cpu\r\n");
 
                   /* Clear reset flags */
                   RCC_ClearFlag();
         }
         else
         {
                   /* IWDGRST flag is not set */
                   printf("normal reset cpu\r\n");
 
         }

 

 

 

2.

 

/* Enable write access to IWDG_PR and IWDG_RLR registers,独立看门狗是受到保护的,现在进行解锁动作 */
         IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
 
         /* IWDG counter clock: LSI/256 ,设置看门狗的时钟 = 32KHz / 256 =125Hz */
         IWDG_SetPrescaler(IWDG_Prescaler_256);
 
         /* 设置看门狗的超时时间,也就是设置它的计数值
         当前看门狗的时钟为125Hz,然后设置超时时间为1秒,那么重载值为125
         当前看门狗的时钟为125Hz,然后设置超时时间为2秒,那么重载值为250
         */   
         IWDG_SetReload(125);
 
         /* Reload IWDG counter,重载独立看门狗的计数值,说白了就是喂狗 */
         IWDG_ReloadCounter();
 
         /* Enable IWDG (the LSI oscillator will be enabled by hardware),使能独立看门狗 */
         IWDG_Enable();

 

 

3.     喂狗技巧

 

1.在裸机代码实现喂狗,放在定时器里面,因为定时器与看门狗是使用不同的时钟源,允许这么做!

技术图片

2.     如果有实时的操作系统的加持,可以在任务里面添加喂狗动作,如果操作系统崩溃了,能够检测到软件的错误,触发CPU的复位。

  

 

在定时器中断服务函数当中,添加喂狗动作!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

---恢复内容结束---

独立看门狗 IWDG

标签:The   set   没有   write   超时   错误   from   cmd   adc   

原文地址:https://www.cnblogs.com/xiangtingshen/p/10963552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!