对于MCU看门狗IIWDG WWDG喂狗时间的配置参考可以参考MCU的datasheet;
在每个MCU的datasheet中都有这样的表格:
6.3.25 Timer characteristics
F091的:
可以封装接口进行看门狗的配置,参数传入ms时长:
以091为例代码实现如下(看门狗是40KHz):
/**
* @brief config 内部独立看门狗.
* @param ms:看门狗时间长度
* @retval None
*/
uint8_t n_iwdg_config(uint32_t ms)
{
uint8_t ret = HAL_OK;
hiwdg.Instance = IWDG;
if(ms > 0 && ms < 500){
hiwdg.Init.Prescaler = IWDG_PRESCALER_4;
hiwdg.Init.Window = ms * 10;
hiwdg.Init.Reload = ms * 10;
}
else if(ms >= 500 && ms <820){
hiwdg.Init.Prescaler = IWDG_PRESCALER_8;
hiwdg.Init.Window = ms * 5;
hiwdg.Init.Reload = ms * 5;
}
else if(ms >= 820 && ms < 1639){
hiwdg.Init.Prescaler = IWDG_PRESCALER_16;
hiwdg.Init.Window = ms * 10 /4;
hiwdg.Init.Reload = ms * 10 /4;
}
else if(ms >= 1639 && ms < 3277){
hiwdg.Init.Prescaler = IWDG_PRESCALER_32;
hiwdg.Init.Window = ms * 10 /8;
hiwdg.Init.Reload = ms * 10 /8;
}
else if(ms >= 3277 && ms < 6554){
hiwdg.Init.Prescaler = IWDG_PRESCALER_64;
hiwdg.Init.Window = ms * 10 /16;
hiwdg.Init.Reload = ms * 10 /16;
}
else if(ms >= 6554 && ms < 13108){
hiwdg.Init.Prescaler = IWDG_PRESCALER_128;
hiwdg.Init.Window = ms * 10 /32;
hiwdg.Init.Reload = ms * 10 /32;
}
else if(ms >= 13108 && ms <26215){
hiwdg.Init.Prescaler = IWDG_PRESCALER_256;
hiwdg.Init.Window = ms * 10 /64;
hiwdg.Init.Reload = ms * 10 /64;
}
ret = HAL_IWDG_Init(&hiwdg);
return ret;
}
/**
* @brief refresh 内部独立看门狗.
* @retval None
*/
void n_iwdg_refresh(void)
{
HAL_IWDG_Refresh(&hiwdg);//假如没配置看门狗,这里就不能调用,调用的话会产生hardfault.
}