独立看门狗 IWDG
大约 1 分钟
独立看门狗 IWDG
外设介绍
本质为一个 12 位的递减计数器 如果计数器的值减到 0, 则产生复位信号, 表示程序出错 需要在复位前进行"喂狗", 重载计数器, 证明程序正常运行 独立看门狗在停止模式和待机模式下仍然能工作
功能框架
时钟
- 独立看门狗使用 LSI 时钟, 精度较低
- 通常 LSI 频率为 30 - 60KHz, 通过分频器得到计数器时钟 CK_CNT = 40 / 4 * 2 ^ PRV
- 设计溢出时间时应使重载时间足够大, 并且认为 LSI 为 60KHz
计数器
- 独立看门狗为一个 12 位的递减计数器, 最大值位 0xFFF
- 计数器重载值存在重载寄存器 rlv 中, 这个值决定了独立看门狗的溢出时间
- 溢出时间 T = (4 * 2 ^ prv) / 40 x rlv(ms)
状态控制
- 独立看门狗通过键寄存器 IWDG_KR 控制
- 0xAAAA 重载计数器
- 0x5555 PRV 与 RLV 使寄存器可写
- 0xCCCC 启动 IWDG, 一旦启动则无法关闭
- 状态寄存器 SR 保存了 PRV 与 RLV 寄存器能否修改
LL 库配置
- LL_IWDG_ReloadCounter(IWDGx); 重载计数器, 喂狗
- LL_IWDG_Enable(IWDGx); 启动 IWDG(当使用 IWDG 后自动启动)
- 可在 cube 设置 Do not generate function call 防止自动启动, 并使用 MX_IWDG_Init 启动