[研电赛技术支持] 看门狗定时周期设置的秘密

[复制链接]
1692|6
 楼主| qcliu 发表于 2023-10-17 16:45 | 显示全部楼层 |阅读模式
之前使用看门狗时,遇到的绝大部分代码都是计时周期为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
}



翻看手册:
38566652e49bef03e4.png
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

tpgf 发表于 2023-11-1 15:33 | 显示全部楼层
感觉设置成10s的话 周期有点长了
 楼主| qcliu 发表于 2023-11-1 22:29 | 显示全部楼层
二楼的说法有一定的道理 这个还得看具体的应用场景
drer 发表于 2023-11-2 08:31 | 显示全部楼层
各种分频系数都可以修改一下试试看都分别是多少
coshi 发表于 2023-11-2 09:14 | 显示全部楼层
我们能够配置的最大的分频系数是多少呢
wiba 发表于 2023-11-2 22:19 | 显示全部楼层
这个表里边的分频是对哪个时钟的分频啊
kxsi 发表于 2023-11-2 22:51 | 显示全部楼层
看门狗的定位在这里 完全没有必要配置这么长的时间间隔
您需要登录后才可以回帖 登录 | 注册

本版积分规则

64

主题

3317

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部