独立看门狗配置步骤
1)取消寄存器写保护,通过函数 HAL_IWDG_Init 实现。
看门狗的喂狗时间(也就是看门狗溢 出时间)的计算方式为:
Tout=((4×2^prer) ×rlr) /32
其中 Tout 为看门狗溢出时间(单位为 ms)。
prer 为看门狗时钟预分频值(IWDG_PR 值),范围为 0~7。
rlr 为看门狗的重装载值(IWDG_RLR 的值)。
比如我们设定 prer 值为 4(因为4×2^4=64,所以 prer =4代表的是 64 分频,HAL 库中可以使用宏定义标识符 IWDG_PRESCALER_64),rlr 值为 500,那么就可以得到 Tout=64×500/32=1000ms,这样,看 门狗的溢出时间就是 1s,只要在一秒钟之内,有一次写入 0xAAAA 到 IWDG_KR,就不会导 致看门狗复位。
注:看门狗的时钟不是准确的 32Khz,最好不要太晚喂狗,否则,有可能发生看门狗复位。
2)重载计数值喂狗(向 IWDG_KR 写入 0xAAAA) 在 HAL 中重载计数值的函数是 HAL_IWDG_Refresh,把值 0xAAAA 写入 到 IWDG_KR 寄存器,从而触发计数器重载,即实现独立看门狗的喂狗操作。
- 启动看门狗(向 IWDG_KR 写入 0xCCCC) HAL 库函数里面启动独立看门狗是通过宏定义标识符来实现的:
#define __HAL_IWDG_START(HANDLE)
WRITE_REG((HANDLE)->Instance->KR, IWDG_KEY_ENABLE);
我们只需要调用宏定义标识符__HAL_IWDG_START 即可实现看门狗使能。实际上,当我 们调用了看门狗初始化函数 HAL_IWDG_Init 之后,在内部已经调用了该宏启动看门狗。
注:调用了看门狗初始化函数 HAL_IWDG_Init 之后,在内部会自动启动看门狗。