目录
什么是看门狗
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用
于监测单片机程序运行状态的模块或者芯片
,俗称看门狗(watchdog) 。
什么是独立看门狗
顾名思义,独立看门狗就是工作在主程序之外,能够完全独立工作,它的时钟是专用的低速时钟
,由 VDD 电压供电,
在停止模式和待机模式下仍能工作
。独立看门狗本质是一个12
位的递减计数器,当计数器的值从某个值一直减到
0
的时候,系统就会产生一个复位信号,即 IWDG_RESET
。
如果在计数没减到
0
之前,刷新了计数器的值的话,那么就不会产生复位信号,
刷新计数器的值这个动作就是我们经常说的喂狗。
独立看门狗框图

独立看门狗时钟
独立看门狗的时钟由独立的RC振荡器LSI提供,即使主时钟发生故障它仍然有效,非常独立。启用IWDG后,LSI时钟会自动开启。LSI时钟频率并不精确,F1用40kHz。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
)
|
应用场合 |
防止程序跑飞,死循环,死机
|
检测程序时效,防止软件异常
|