看门狗定时周期设置的秘密

之前使用看门狗时,遇到的绝大部分代码都是计时周期为1。
某日,突发异想把计时周期改到10秒,结果出问题了。。。设备一直重启!
先看代码,看门狗初始化配置代码如下:

void IWDG_Init(void)
{
#ifdef USE_WDG
    dbg_periph_enable(DBG_FWDGT_HOLD);//内核停止时(调试模式),使看门狗定时器保持工作,避免调试时触发看门狗

    fwdgt_write_enable();
    fwdgt_config(2500*10, FWDGT_PSC_DIV16);
    fwdgt_counter_reload();
    fwdgt_enable();
#endif
}

翻看手册:
在这里插入图片描述
so,看到了什么?
看门狗时钟16分频时,独立看门狗支持的最大计时周期是1638.4ms,即1.6384s,是无法实现我所期望的10秒周期的。

如果需要实现看门狗计时10秒周期,查表可知,需要分频系数设置为128及以上。
修改后,实现10秒计时周期的代码如下:

void IWDG_Init(void)
{
#ifdef USE_WDG
    dbg_periph_enable(DBG_FWDGT_HOLD);//内核停止时(调试模式),使看门狗定时器保持工作,避免调试时触发看门狗

    fwdgt_write_enable();
    fwdgt_config(2500*10, FWDGT_PSC_DIV128);
    fwdgt_counter_reload();
    fwdgt_enable();
#endif
}

此时,即可实现独立看门狗计时周期为10秒的配置。
但实际上为了保证设备异常时尽快重启恢复正常,看门狗计时周期设置为1秒为佳。
除了在嘀嗒定时器中及时喂狗之外,若是未使用操作系统还需要在处理较大的while、for循环中及时喂狗,避免因在一个函数任务中耗费太多时间,导致触发看门狗事件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值