STM32 看门狗详解

2022-08-12 14:41:56 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

目录

1、IWDG

1.1 独立看门狗简介

1.2 独立看门狗的特点

1.3 独立看门狗功能描述

1.4 硬件看门狗

1.5 寄存器访问保护

1.6 调试模式

2、WWDG

2.1 简介

2.2 窗口看门狗主要特点

2.3 窗口看门狗功能说明

2.4 如何设置看门狗超时

2.5 调试模式

3、区别

1、IWDG

1.1 独立看门狗简介

IWDG(Independent watchdog)独立看门狗,可以用来检测并解决由于软件错误导致的故障,当计数器到达给定的超时值时,会触发一个中断或产生系统复位

独立看门狗的时钟是它专用的低速时钟(LSI),所以它能保持工作及时主时钟出现问题。窗口看门狗的时钟是有APB1时钟分频得到得到,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。 WWDG 最适合那些要求看门狗在精确计时窗口起作用的应用程序。

1.2 独立看门狗的特点

①自由运行递减计数器

②时钟来自通过独立的RC振荡器(可以工作在待机和停止模式下)

③当向下计数器值达到0时,会产生复位(如果看门狗已经激活)

1.3 独立看门狗功能描述

上图红框显示,看门狗功能由 VDD 电压域供电,所以在停止模式和待机模式下仍能工作

向关键字寄存器(IWDG_KR)写入0XCCCC,独立看门狗就会启动,计数器开始下降从复位值0XFFF。当计数器值到达0,会产生一个复位信号(独立看门狗复位)

无论何时向关键字寄存器写入0XAAAA,IWDG_RLR的数值会重载进计数器,避免看门狗复位

1.4 硬件看门狗

如果通过器件选项位使能“硬件看门狗”功能,上电时将自动使能看门狗;如果在计数器计数结束前,若软件没有向关键字寄存器写入相应的值,则系统会产生复位

1.5 寄存器访问保护

IWDG_PR 和 IWDG_RLR 寄存器具有写访问保护。若要修改寄存器,必须首先对 IWDG_KR寄存器写入代码 0x5555。而写入其他值则会破坏该序列,从而使寄存器访问保护再次生效。这意味着重装载操作(即写入 0xAAAA)也会启动写保护功能。

状态寄存器指示预分频值和递减计数器是否正在被更新

1.6 调试模式

当微控制器进入调试模式时( Cortex™-M3 内核停止), IWDG 计数器会根据 DBG 模块中的 DBG_IWDG_STOP 配置位选择继续正常工作或者停止工作

下图是LSI在不同分频情况下IWDG超时周期的最小值和最大值。

2、WWDG

2.1 简介

窗口看门狗(Window watchdog)通常被用来监测,由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。除非递减计数器的值在 T6 位变成 0 前被刷新,看门狗电路在达到预置的时间周期时,会产生一个 MCU 复位。如果在递减计数器达到窗口寄存器值之前刷新控制寄存器中的 7 位递减计数器值,也会产生 MCU 复位。这意味着必须在限定的时间窗口内刷新计数器

2.2 窗口看门狗主要特点

①可编程自由向下计数器

②复位条件,激活看门狗的情况下,当递减计数器值小于 0x40 时复位;在窗口之外重载递减计数器时复位。

③提前唤醒中断 (EWI):当递减计数器等于 0x40 时触发(如果已使能且看门狗已激活)

2.3 窗口看门狗功能说明

如果窗口看门狗启动(WWDG_CR寄存器的WDGA位置1),7位向下计数器从0X40向0x3F滚动(T6已经清零),会导致一个复位。如果软件重载计数器,当计数器值大于窗口所存储的值时,就会产生复位

应用程序必须在正常操作期间写WWDG_CR寄存器去组织MCU复位。这个操作必须发生在计数器值小于窗口寄存器值。窗口寄存器值存储在WWDG_CR寄存器,必须在0XFF和0XC0之间。

使能窗口看门狗

复位之后,窗口寄存器经常是禁止的。通过设置WWDG_CR寄存器的WDGA位去使能,不能被禁止除了通过复位。

控制向下计数器

递减计数器处于自由运行状态:即使禁止看门狗,递减计数器仍继续递减计数。当使能看门狗时,必须将 T6 位置 1,以防止立即复位

T[5:0] 位包含了看门狗产生复位之前的计时数目;复位前的延时时间在一个最小值和一个最大值之间变化,这是因为写入 WWDG_CR 寄存器时,预分频值是未知的。配置寄存器 (WWDG_CFR) 包含窗口的上限:为防止发生复位,当递减计数器的值低于窗口寄存器值且大于 0x3F 时必须重载

注意:可使用 T6 位产生软件复位(将 WDGA 位置 1 并将 T6 位清零)

看门狗中断高级特性

如果在产生实际复位之前必须执行特定的安全操作或数据记录,则可使用提前唤醒中断(EWI)。通过设置 WWDG_CFR 寄存器中的 EWI 位使能 EWI 中断。当递减计数器的值为0x40 时,将生成 EWI 中断。在复位器件之前,可以使用相应的中断服务程序 (ISR) 来触发特定操作(例如通信或数据记录)。

在某些应用中,可以使用 EWI 中断来管理软件系统检查和/或系统恢复/功能退化,而不会生成 WWDG 复位。在这种情况下,相应的中断服务程序 (ISR) 可用来重载 WWDG 计数器以避免 WWDG 复位,然后再触发所需操作。

通过将 0 写入 WWDG_SR 寄存器中的 EWIF 位来清除 EWI 中断

2.4 如何设置看门狗超时

例子:APB1的频率是24MHZ,WDGTB[1:0]设置3,T[5:0]设置成63

t = 1/24000*4096*2*2*2*(63 1)= 24.85ms

有关 TWWDG 的最小值和最大值

2.5 调试模式

当微控制器进入调试模式时( Cortex™-M3内核停止),WWDG计数器会根据DBG模块中的DBG_WWDG_STOP配置位选择继续正常工作或者停止工作

3、区别

应用场景不同

IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时间精度要求较低的场合。

WWDG 最适合那些要求看门狗在精确计时窗口起作用的应用程序

为什么要窗口看门狗?

对于一般的看门狗,程序可以在它产生复位前的任意时刻刷新看门狗,但这有一个隐患,有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下一般的看门狗就检测不出来了;

如果使用窗口看门狗,程序员可以根据程序正常执行的时间设置刷新看门狗的一个时间窗口,保证不会提前刷新看门狗也不会滞后刷新看门狗,这样可以检测出程序没有按照正常的路径运行非正常地跳过了某些程序段的情况。

看门狗代码开源地址:

https://github.com/strongercjd/STM32F207VCT6

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131537.html原文链接:https://javaforall.cn

0 人点赞