STM32
直播中

周棠亨

7年用户 1008经验值
擅长:可编程逻辑 电源/新能源
私信 关注
[问答]

什么是stm32看门狗?stm32看门狗分为哪几类?

什么是STM32看门狗?stm32看门狗分为哪几类?
独立看门狗与窗口看门狗有哪些异同点?

回帖(1)

孙宇

2021-7-23 11:53:43
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)时重新装载计数器,也将产生一个复位。
(三)二者相同点
软件代码一直死循环在某处,无法喂狗,导致产生复位
代码运行超时,或外部一直触发中断,导致无法喂狗产生复位
喂狗时间限制可以自己设定
(四)二者不同点
计数器时钟源不同
• 独立看门狗由内部专门的40KHz的LSI时钟,使用前不需使能
• 窗口看门狗使用PCLK1时钟,使用前需要使能。
中断不都有
• 独立看门狗不产生中断,超时直接复位
• 窗口看门狗有中断,超时可以在中断中做复位前的函数炒作或者重新喂狗。
计数方式不同
• 独立看门狗的寄存器是12位递减
• 窗口看门狗是7位递减,窗口最大值为0x7F
超时复位时间范围不同
• 独立看门狗:计数值 《 IWDG重装载值时喂狗
• 窗口看门狗:0x40 《 计数器值 《 窗口值Wt期间喂狗,0x40是固定的。
使用条件推荐
• 独立看门狗一般用于避免程序跑飞或死循环
• 窗口看门狗用于避免不按预定逻辑执行,如先于理想环境完成,或后于极限时间超时。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分