STM32
直播中

小萃米

11年用户 801经验值
私信 关注
[问答]

如何对MCU看门狗IWDG的喂狗时间进行配置

如何对MCU看门狗IWDG的喂狗时间进行配置?

如何对MCU看门狗WWDG的喂狗时间进行配置?

回帖(1)

孙婷

2021-9-17 17:54:44
对于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.}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分