对于MCU看门狗IIWDG WWDG喂狗时间的配置参考

对于MCU看门狗IIWDG WWDG喂狗时间的配置参考可以参考MCU的datasheet;

在每个MCU的datasheet中都有这样的表格:

6.3.25 Timer characteristics
 

对于MCU看门狗IIWDG WWDG喂狗时间的配置参考_第1张图片

F091的:

对于MCU看门狗IIWDG WWDG喂狗时间的配置参考_第2张图片

可以封装接口进行看门狗的配置,参数传入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.
}

 

你可能感兴趣的:(驱动,STM32)