打印
[研电赛技术支持]

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

[复制链接]
1072|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
}



翻看手册:

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 | 只看该作者
各种分频系数都可以修改一下试试看都分别是多少

使用特权

评论回复
5
coshi| | 2023-11-2 09:14 | 只看该作者
我们能够配置的最大的分频系数是多少呢

使用特权

评论回复
6
wiba| | 2023-11-2 22:19 | 只看该作者
这个表里边的分频是对哪个时钟的分频啊

使用特权

评论回复
7
kxsi| | 2023-11-2 22:51 | 只看该作者
看门狗的定位在这里 完全没有必要配置这么长的时间间隔

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

64

主题

3317

帖子

4

粉丝