继续更新学习STM32的历程,今天学习看门狗。
在单片机构成的微型计算机系统中,单片机的工作时常收到外界电磁场的干扰,导致程序跑飞,陷入死循环。为了解决这个问题,产生了一种用于监测单片机程序运行状态的模块或芯片,叫做看门狗(WatchDog),而这个东西已经集成在STM32芯片内部。它能在系统跑飞的情况下将系统复位,重新执行程序。
STM32有两个看门狗,一个是窗口看门狗,由APB1时钟分频后得到的时钟驱动;另一个是独立看门狗,由专用的低速时钟(LSI)驱动,它是由内部的RC振荡器产生的,约为40KHZ,即使主时钟发生故障它仍然有效。
看门狗的原理是:当我们使能看门狗时(往键值寄存器IWDG_KR写入0xCCCC实现),12位的计数器就会从0xFFF开始递减,直到减为0,系统复位。在这个过程中,我们要不断地喂狗,才能使系统不复位。喂狗是将重装载寄存器的值赋给计数器,然后计数器从这个值开始递减。
由于预分频寄存器IWDG_PR和重装载寄存器IWDG_RLR有写保护功能,即如果不取消这个功能,不能往里面写数据。1)所以首先要往下面第一个库函数里面写0x5555,取消写保护。2)然后设置预分频系数和重装载值。3)使能看门狗。4)程序喂狗。
![f58327e6f1836491738073bfd752823b.png](https://i-blog.csdnimg.cn/blog_migrate/1ab9add12e0e7995e9c0802ce27ab0b9.jpeg)
![378a3b87ede8e038aa8b61644eded331.png](https://i-blog.csdnimg.cn/blog_migrate/e0cbf63afd7e5a1621216c7fde9b4333.jpeg)
![ad12a7f4d67fdd4253a4f64286ae1f0b.png](https://i-blog.csdnimg.cn/blog_migrate/d3303ae269f63cc41c83268be0813a9c.jpeg)
本次程序将实现一个功能:LED灯在初始化后是灭的状态,经过200mS的延时后点亮,即如果系统不断复位,则灯会一直闪烁。而当按下按键时,会实现喂狗功能,也就是将重装载值赋给计数器去递减。而计数器递减至0的时间设置为2S,也就是说如果2S内没有去按下按键(喂狗),则系统复位。如果2S内一直按按键,则LED常亮。
![6ba7eb396b4de9461f48eaf49c53b1f4.png](https://i-blog.csdnimg.cn/blog_migrate/6a9d9c17132b7cf5550419c161db35af.jpeg)