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

对于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.
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值