独立看门狗 IWDG

Posted xiangtingshen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了独立看门狗 IWDG相关的知识,希望对你有一定的参考价值。

一,独立看门狗

 

技术图片

二,独立看门狗的时钟源

技术图片

独立看门狗拥有自己的时钟源,不依赖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的主要内容,如果未能解决你的问题,请参考以下文章

18 . 独立看门狗(IWDG)实验

18 . 独立看门狗(IWDG)实验

18 . 独立看门狗(IWDG)实验

STM32------- 独立看门狗(IWDG)

STM32F103五分钟入门系列(十三)独立看门狗IWDG

STM32学习小记之独立看门狗(IWDG)