stm32看门狗的定义与分类

stm32看门狗

一、定义

由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的模块或者芯片,俗称看门狗”(watchdog)

二、分类

STM32内置两个看门狗,独立看门狗和窗口看门狗,用来检测和解决由软件错误引起的故障。当计数器达到给定的超时值时,产生系统复位或者触发一个中断(仅适用窗口看门狗)。

(一)、独立看门狗(IWDG)

如果喂狗时间超出某个可设定的时间,就会认为程序跑飞,产生复位。
由专用的低速时钟(LSI)驱动,即使主时钟发生故障它仍有效。
独立看门狗适合应用于需要看门狗作为一个在主程序之外 能够完全独立工作,并
且对时间精度要求低的场合。
在这里插入图片描述
键寄存器(IWDG_KR)

  • 位31:16 保留,始终读为0。
  • 位15:0 KEY[15:0]: 键值(只写寄存器,读出值为0x0000)
  • 写入0xAAAA,重载计数器。软件必须以一定的间隔写入0xAAAA,否则,当计数器为0时,看门狗会产生复位。
  • 写入0x5555表示允许访问IWDG_PR和IWDG_RLR寄存器。
  • 写入0xCCCC,启动看门狗工作(若选择了硬件看门狗则不受此命令字限制)。

(二)、窗口看门狗

喂狗必须在某个可设定的时间窗内进行,早于或晚于这个时间窗喂狗都会触发复位。
由从APB1时钟分频后得到时钟驱动。
通过可配置的时间窗口来检测应用程序非正常的过迟或过早操作。
窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。
在这里插入图片描述
如果看门狗被启动(WWDG_CR寄存器中的WDGA位被置’1’), 并且当7位(T[6:0])递减计数器从0x40(T6为1)翻转到0x3F(T6位清零)时,则产生一个复位。
如果软件在计数器值大于窗口配置寄存器中的数值(WWDG_CFR)时重新装载计数器,也将产生一个复位。

(三)二者相同点

  1. 软件代码一直死循环在某处,无法喂狗,导致产生复位
  2. 代码运行超时,或外部一直触发中断,导致无法喂狗产生复位
  3. 喂狗时间限制可以自己设定

(四)二者不同点

  1. 计数器时钟源不同
    • 独立看门狗由内部专门的40KHz的LSI时钟,使用前不需使能
    • 窗口看门狗使用PCLK1时钟,使用前需要使能。
  2. 中断不都有
    • 独立看门狗不产生中断,超时直接复位
    • 窗口看门狗有中断,超时可以在中断中做复位前的函数炒作或者重新喂狗。
  3. 计数方式不同
    • 独立看门狗的寄存器是12位递减
    • 窗口看门狗是7位递减,窗口最大值为0x7F
  4. 超时复位时间范围不同
    • 独立看门狗:计数值 < IWDG重装载值时喂狗
    • 窗口看门狗:0x40 < 计数器值 < 窗口值Wt期间喂狗,0x40是固定的。
  5. 使用条件推荐
    • 独立看门狗一般用于避免程序跑飞或死循环
    • 窗口看门狗用于避免不按预定逻辑执行,如先于理想环境完成,或后于极
    限时间超时。

猜你喜欢

转载自blog.csdn.net/Kattlin_gsc/article/details/106889981
今日推荐