之前使用看门狗时,遇到的绝大部分代码都是计时周期为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循环中及时喂狗,避免因在一个函数任务中耗费太多时间,导致触发看门狗事件。
————————————————
版权声明:本文为CSDN博主「stand_young」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44612435/article/details/125310045
|