独立看门狗和窗口看门狗

目录

什么是看门狗

什么是独立看门狗

独立看门狗时钟

预分频寄存器

分频系数算法

重装载寄存器

键寄存器

溢出时间计算公式

什么是窗口看门狗

窗口看门狗工作原理

WWDG框图

控制寄存器

配置寄存器

状态寄存器

超时时间计算

独立看门狗和窗口看门狗的异同点


什么是看门狗

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

什么是独立看门狗

顾名思义,独立看门狗就是工作在主程序之外,能够完全独立工作,它的时钟是专用的低速时钟 ,由 VDD 电压供电, 在停止模式和待机模式下仍能工作 。独立看门狗本质是一个12 位的递减计数器,当计数器的值从某个值一直减到 0 的时候,系统就会产生一个复位信号,即 IWDG_RESET
如果在计数没减到 0 之前,刷新了计数器的值的话,那么就不会产生复位信号, 刷新计数器的值这个动作就是我们经常说的喂狗。

独立看门狗框图

独立看门狗时钟

独立看门狗的时钟由独立的RC振荡器LSI提供,即使主时钟发生故障它仍然有效,非常独立。启用IWDG后,LSI时钟会自动开启。LSI时钟频率并不精确,F140kHz。LSI经过一个8位的预分频器得到计数器时钟。

预分频寄存器

地址偏移:0x04

复位值:0x0000 0000

31-16位                     保留,始终读为为零
15-0位 PR[2:0]:预分频因子(Prescaler divider)
这些位具有写保护设置。通过设置这些位来选择计数器时钟的预分频因子。要改变预分频因子,IWDG_SR寄存器的PVU位必须为0。
000:预分频因子=4 100:预分频因子=64
001:预分频因子=8 101:预分频因子=128
010:预分频因子=16 110:预分频因子=256
011:预分频因子=32 111:预分频因子=256
注意:对此寄存器进行读操作,将从VDD电压域返回预分频值。如果写操作正在进行,则读回的值可能是无效的。因此,只有当IWDG_SR寄存器的PVU位为0时,读出的值才有效。

分频系数算法

prer是IWDG_PR 的值。

重装载寄存器

重装载寄存器是一个 12 位的寄存器,用于存放重装载值,低 12 位有效,即最大值为 4096 ,这个值
的大小决定着独立看门狗的溢出时间。

地址偏移:0x04

复位值:0x0000 0FFF(待机模式时复位)

31-12位                                保留,始终读为零
15-0位 RL[11:0]:看门狗计数器重装载值(Watchdog counter reload value)
这些位具有写保护功能。用于定义看门狗计数器的重装载值,每当向IWDG_KR寄存器写入0xAAAA时,重装载值会被传送到计数器中。随后计数器从这个值开始递减计数。看门狗超时周期可通过此重装载值和时钟预分频值来计算。
只有当IWDG_SR寄存器中的RVU位为0时,才能对此寄存器进行修改。
注:对此寄存器进行读操作,将从VDD电压域返回预分频值。如果写操作正在进行,则读回的值可能是无效的。因此,只有当IWDG_SR寄存器的RVU位为0时,读出的值才有效。

键寄存器

键寄存器 IWDG_KR 可以说是独立看门狗的一个控制寄存器,主要有三种控制方式,往这个寄存器
写入下面三个不同的值有不同的效果。

地址偏移:0x04

复位值:0x0000 0FFF(在待机模式时复位)

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

溢出时间计算公式

什么是窗口看门狗

  窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常,一般用于需要精准检测程序运行时间的场合。窗口看门狗的本质是一个能产生系统复位信号和 提前唤醒中断 6 位计数器。产生复位条件:
        当递减计数器值从 0x40 减到 0x3F 时复位(即 T6 位跳变到 0)
        计数器的值大于 W[6:0] 值时喂狗会复位。
产生中断条件:
        当递减计数器等于 0x40 时可产生提前唤醒中断 (EWI)。
        在窗口期内重装载计数器的值,防止复位,也就是所谓的喂狗。 

窗口看门狗工作原理

WWDG框图

控制寄存器

地址偏移量:0x00

复位值:0x7F

31-8位           保留
7位 WDGA:激活位(Activation bit)
此位由软件置’1',但仅能由硬件在复位后清'0'。当WDGA=1时,看门狗可以产生复位。
0:禁止看门狗
1:启用看门狗
0-6位 T[6:0]:7位计数器(MSB至LSB) (7-bit counter)
这些位用来存储看门狗的计数器值。每(4096x2^WDGTB)个PCLK1周期减1。当计数器值从40h变为3Fh时(T6变成0),产生看门狗复位。

配置寄存器

地址偏移量:0x04

复位值:0x7F

31-8位 保留
9位 EWI:提前唤醒中断 (Early wakeup interrupt)
此位若置’1,则当计数器值达到40h,即产生中断。此中断只能由硬件在复位后清除。
8位7位 WDGTB[1:0]:时基(Timer base)
预分频器的时基可以设置如下:
00: CK计时器时钟(PCLK1除以4096)除以1
01:CK计时器时钟(PCLK1除以4096)除以2
10:CK计时器时钟(PCLK1除以4096)除以4
11:CK计时器时钟(PCLK1除以4096)除以8
6-0位 W[6:0]:7位窗口值(7-bit window value)
这些位包含了用来与递减计数器进行比较用的窗口值。

状态寄存器

地址偏移量:0x08

复位值:0x00

31-1位     保留
0位 EWIF:提前唤醒中断标志 (Early wakeup interrupt flag)
当计数器值达到40h时,此位由硬件置'1。它必须通过软件写'0'来清除。对此位写’1’无效。若
中断未被使能,此位也会被置‘1'。

超时时间计算

Tout是WWDG超时时间(没喂狗)

Fwwdg WWDG 的时钟源频率(最大 36M
4096 WWDG 固定的预分频系数
2^WDGTB WWDG_CFR 寄存器设置的预分频系数值
T[5:0] WWDG 计数器低 6 位,最多 63

独立看门狗和窗口看门狗的异同点

对比项 独立看门狗 窗口看门狗
时钟源
独立时钟, LSI (40KHz) ,不精确
PCLK1 PCLK3 ,精确
复位条件
递减计数到 0
窗口期外喂狗或减到 0x3F
中断
没有中断
计数值减到 0x40 可产生中断
递减计数器位数
12 位(最大计数范围: 4096~0
7 位(最大计数范围: 127~63
应用场合
防止程序跑飞,死循环,死机              
检测程序时效,防止软件异常             

猜你喜欢

转载自blog.csdn.net/2301_77164542/article/details/131351687