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