STM32F407ZG开发板学习(5)
看门狗简介
每隔一段时间需要检测到MCU发来的信号(喂狗),否则会给MCU一个复位信号,使其复位,以防止程序发生死循环。
独立看门狗 (IWDG) 由其专用低速时钟 (LSI) 驱动,因此即便在主时钟发生故障时仍然保持工作状态。窗口看门狗 (WWDG) 时钟由 APB1 时钟经预分频后提供,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。
独立看门狗IWDG
IWDG 最适合应用于那些需要看门狗作为一个在主程序之外,能够完全独立工作,并且对时 间精度要求较低的场合。
当通过对关键字寄存器 (IWDG_KR) 写入值 0xCCCC 启动独立看门狗时,计数器开始从复位值 0xFFF 递减计数。当计数器计数到终值 (0x000) 时会产生一个复位信号(IWDG 复位)。
任何时候将关键字 0xAAAA 写到 IWWDG_KR 寄存器中,IWDG_RLR 的值就会被重载到计数器,从而避免产生看门狗复位,俗称喂狗操作。
原理
IWDG的原理比较简单,预先设置好重载值,开启看门狗后,重载值就会递减,当递减到0会产生一个IWDG复位信号,把程序复位一次。

IWDG_KR 关键字寄存器
官方文档已经讲得很清楚了,写入0xAAAA就是所谓的喂狗操作。
(这里实际我有个疑问,如果KR实际的状态就只有0000h、5555h、AAAAh、CCCCh的话,为什么不用两个bit或4个bit标记状态来取代呢?还是说需要16位来做一些什么)

IWDG_PR 预分频寄存器
实际上就3个bit,表示8种分频数。

IWDG_RLR 重载值寄存器
12位,因此最大计数为0xFFF。

IWDG_SR 状态寄存器
两位,两个分别表示更新RLR和PR的失能/使能。

窗口门狗WWDG
窗口看门狗(WWDG )通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。
窗口看门狗跟独立看门狗一样,也是一个递减计数器不断的往下递减计数,当减到一个固定值 0X40 时还不喂狗的话,产生复位,这个值叫窗口的下限,是固定的值,不能改变。这个是跟独立看门狗类似的地方,不同的地方是窗口看门狗的计数器的值在减到某一个数之前喂狗的话也会产生复位,这个值叫窗口的上限,上限值由用户独立设置。窗口看门狗计数器的值必须在上窗口和下窗口之间才可以喂狗,这就是窗口看门狗中窗口两个字的含义。
原理
顾名思义,窗口看门狗只允许在某一个时间段执行喂狗操作,如下方的图,与独立看门狗一样,它也是通过一个计数值CNT的递减,但它同时有一个窗口值CFR来规定允许喂狗的时间段。这意味着从计数递减到窗口值的这段时间,喂狗操作无效,当计数递减至0,同样会产生复位。但WWDG还为我们提供一个复位前的中断,我们可以在中断处理程序的出错原因并在其中考虑是否喂狗,详情见 计数器 的介绍。

计数器
窗口看门狗的计数器是一个递减计数器,共有 7 位,其值存在控制寄存器 CR 的位 6:0,即 T[6:0],当 7 个位全部为 1 时是 0X7F,这个是最大值,当递减到 T6 位变成 0时,即从0X40 变为 0X3F时候,会产生看门狗复位。 这个值 0X40 是看门狗能够递减到的最小值,所以计数器的值只能是:0X40~0X7F之间,实际上用来计数的是 T[5:0]。 当递减计数器递减到 0X40 的时候,还不会马上产生复位,如果使能了提前唤醒中断:CFR 位 9 EWI 置 1,则产生提前唤醒中断,如果真进入了这个中断的话,就说明程序肯定是出问题了,那么在中断服务程序里面我们就需要做最重要的工作,比如保存重要数据,或者报警等,这个中断我们也叫它死前中断。
窗口值
我们知道窗口看门狗必须在计数器的值在一个范围内才可以喂狗,其中下窗口的值是固定的 0X40,上窗口的值可以改变,具体的由配置寄存器 CFR的位 6:0 W[6:0]设置。其值必须大于 0X40,如果小于或者等于 0X40就是失去了窗口的价值,而且也不能大于计数器的值,所以必须得小于 0X7F。
那窗口值具体要设置成多大?这个得根据我们需要监控的程序的运行时间来决定。如果我们要监控的程序段 A运行的时间为 Ta,当执行完这段程序之后就要进行喂狗,如果在窗口时间内没有喂狗的话,那程序就肯定是出问题了。
一般计数器的值 TR设置成最大 0X7F,窗口值为 WR,计数器减一个数的时间为 T,那么时间:(TR-WR)*T应该稍微大于 Ta即可,这样就能做到刚执行完程序段 A之后喂狗,起到监控的作用,这样也就可以算出 WR的值是多少。
计数器时钟
计数器时钟由 C

本文详细介绍了STM32的独立看门狗IWDG和窗口看门狗WWDG的工作原理、寄存器配置以及在MCU程序监控中的应用。IWDG由LSI时钟驱动,WWDG由APB1时钟分频,两者都有防止程序死循环的复位机制。IWDG主要参数包括预分频寄存器、重载值寄存器和状态寄存器,而WWDG增加了窗口值和提前唤醒中断功能。实验部分展示了如何配置和使用这两个看门狗进行程序监控,确保系统稳定运行。
最低0.47元/天 解锁文章
3096

被折叠的 条评论
为什么被折叠?



