文章目录
- 1. 简述
- 2. 独立看门狗 IWDG
- 2.1 IWDG 相关寄存器
- 2.1.1 键值寄存器`IWDG_KR`
- 2.1.2 预分频寄存器`IWDG_PR`与重装载寄存器`IWDG_RLR`
- 2.2 核心代码
1. 简述
STM32 内部自带了 2 个看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG);
2. 独立看门狗 IWDG
STM32 的独立看门狗由内部专门的 40Khz 低速时钟驱动(该内部低速时钟并不精确),即使主时钟发生故障,它也仍然有效;
- IWDG 的作用:在一定时间内若没有接收喂狗信号(表示 MCU 已经挂了或程序跑飞了),便实现处理器的自动复位重启(发送复位信号);
- ⚠注意 IWDG 在一旦在程序中启用,就不能再被关闭!
2.1 IWDG 相关寄存器
2.1.1 键值寄存器IWDG_KR
IWDG_KR
的使用:
2.1.2 预分频寄存器IWDG_PR
与重装载寄存器IWDG_RLR
- 接触两个寄存器的写保护:具有写保护功能。要修改这两个寄存器的值,必须先向
IWDG_KR
寄存器中写入 0x5555; - 看门狗溢出时间计算公式:Tout=((4×2^prer) ×rlr) /40,单位ms,其中prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7;rlr 为看门狗的重装载值(IWDG_RLR 的值);
2.2 核心代码
// IWDG 初始化函数
void IWDG_Init(u8 prer,u16 rlr)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); //使能对寄存器IWDG_PR和IWDG_RLR的写操作
IWDG_SetPrescaler(prer); //设置IWDG预分频值:设置IWDG预分频值为64
IWDG_SetReload(rlr); //设置IWDG重装载值
IWDG_ReloadCounter(); //按照IWDG重装载寄存器的值重装载IWDG计数器
IWDG_Enable(); //使能IWDG
}
// 假如预分频系数为4,自动重装载系数为625,则IWDG 溢出时间为1s
IWDG_Init(4,625);
// 喂狗
IWDG_ReloadCounter();