独立看门狗(IWDG,Independent watchdog),本质是一个可以定时产生系统复位信号、并且可以通过”喂狗“复位的计时器。它由独立的RC振荡器、低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效,LSI 的频率一般取 40KHZ。用通俗一点的话来解释就是一个 12 位的递减计数器,当计数器的值从某个值一直减到 0 的时候,系统就会产生一个复位信号,即 IWDG_RESET。如果在计数没减到 0 之前,重装载计数器的时钟值,那么就不会产生复位信号,这个动作就是我们经常说的喂狗。
看门狗功能由 VDD 电压域供电,在停止模式和待机模式下仍能工作。IWDG最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。相比而言,窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
看门狗的作用是面对外界电磁干扰和内部(硬件或软件)错误,导致程序跑飞。比如程序因为一个外界的电磁干扰陷入了一个死循环,打断正常程序运行,而看门狗能通过触发系统复位来恢复程序正常运行,规避掉了程序收到外界干扰导致的错误。一般需要应用在需要高稳定性但对精度较低的硬件中。
接下来介绍我们的IWDG的工作原理。
当我们启动IWDG之后,LSI自动启动,给IWDG输入LSI的40MHz低频时钟信号,通过8位预分频器PSC,再得到我们真正的IWDG_CLK独立看门狗工作时钟信号。接下来把IWDG_CLK独立看门狗时钟信号输入递减计时器CNT,当CNT信号计数到0的时候(CNT==0),就会触发系统复位。但如果我们激活了IWDG_RLR重装载寄存器,将CNT复位,重新开始计数器计时。