1. IWDG
1.1 简介
全称:Independent watchdog,独立看门狗
本质:能产生系统复位信号的计数器
特性:递减的计数器
时钟由独立的RC振荡器提供(可在待机和停止模式下允许)
看门狗被激活后,当递减计数器计数到0x000时产生复位
喂狗:在计数器计数到0之前,重装载计数器的值,防止复位
1.2 作用
- 异常:外界电磁干扰或者自身系统(硬件或软件)异常,造成程序跑飞,如:陷入某个不正常的死循环,打断正常的程序运行
- 作用:主要用于检测外界电磁干扰,或硬件异常导致的程序跑飞问题
- 应用:在一些需要高稳定性的产品中,并且对时间精度要求较低的场合
独立看门狗是异常处理的最后手段。
1.3 工作原理
CPU必须及时喂狗,否则系统复位重启
1.4 IWDG框图
启用IWDG后,LSI时钟会自动开启,而LSI时钟频率不精确。F1用40KHz
1.5 寄存器
-
键寄存器(IWDG_KR)
写入0xAAAA,喂狗 写入0x5555,解除PR和RLR寄存器写访问保护 写入0xCCCC,启动IWDG工作 -
预分频寄存器(IWDG_PR)
设置IWDG时钟预分频系数 -
重装载寄存器(IWDG_RLR)
存放重装载值,低12位有效,即最大值为4096 -
状态寄存器(IWDG_SR)
用于判断预分频值和重装载值是否已经被更新
1.6 溢出时间计算
- HAL库计算溢出时间公式
- 寄存器设置分频系数的方法
- 寄存器计算溢出时间公式
1.7 IWDG配置步骤
-
取消PR/RLR寄存器写保护,设置IWDG、预分频系数和重装载值,启动IWDG
HAL_IWDG_Init() -
及时喂狗,即写入0XAAAA到IWDG_KR
HAL_IWDG_Refresh()
2. WWDG
2.1 简介
全称:Window watchdog,窗口看门狗
本质:能产生系统复位信号和提前唤醒中断的计数器
2.2 特性
- 递减的计数器
- 当递减计数器值从0x40减到0x3F时复位(即T6位跳变到0)
- 计数器的值大于W[6:0]值时喂狗会复位
- 提前唤醒中断(EWI):当递减计数器等于0X40时可产生
2.3 喂狗
在窗口期内重装载计数器的值,防止复位
2.4 作用
用于监测单片机程序运行时效是否精确,主要用于检测软件异常。应用于需要精准检测程序运行时间的场合
2.5 工作原理
2.6 WWDG框图
2.7 寄存器
-
控制寄存器(WWDG_CR)
用于使能窗口看门狗工作,以及重装载计数器值(即喂狗) -
配置寄存器(WWDG_CFR)
用于使能窗口看门狗提前唤醒中断,设置预分频系数,设置窗口上限值 -
状态寄存器(WWDG_SR)
用于判断是否发送了WWDG提前唤醒中断
2.8 超时时间计算
- 计算公式