独立看门狗还有硬件与软件之分?这么多年才知道
在逛论坛的时候,看到有人讨论看门狗的启动,点开帖子一阅。一直以为挺普通的独立看门狗(IWDG)突然变得不普通,彰显了其英雄本色。独立看门狗的功能特性非常简单与专一。打开后,必须喂狗。未按时喂狗则会引发系统复位,很简单,很实用。用法也非常简单:计算一下while(1)中各项工作的时长,将看门狗的周期设置略大于此时长。这样就能保证在各项工作完成之后,可以喂狗成功。当意外情况发生后,看门狗也能及时响应系统的异常,实现系统复位操作。
我们以极海APM32E030为例,官方的SDK已经有现成的示例参考程序可以使用。这里简单附上代码,方便大家阅读(代码中的中文部分为我添加内容)
void IWDTInit()
{
/* clear IWDTRST Flag*/
if (RCM_ReadStatusFlag(RCM_FLAG_IWDTRST) != RESET)
{
RCM_ClearStatusFlag();
}
/* set IWDT Write Access */
IWDT_EnableWriteAccess();
/* set IWDT Divider 调整喂狗周期时长 */
IWDT_ConfigDivider(IWDT_DIV_64);
/* set IWDT Reloader 只有12位有效 */
IWDT_ConfigReload(40000 / 32);
/* Refresh */
IWDT_Refresh();
/* Enable IWDT */
IWDT_Enable();
}
void IWDT_Feed(void)
{
IWDT_Refresh();
}其实以上并不是本次帖子的主要目的,主要目的是独立看门狗的配置里是分两个部分:一部分是我们现在讲到的最常见的部分,启动和周期性喂狗。而另一部分则是硬件看门狗部分,是由MCU的选项字控制的。在Flash控制器的选项字节功能描述章节,即UOB字体的bit位0: WDTSEL,来标识当前启动的硬件看门狗,还是软件看门狗。
到这里引入了“硬件看门狗”的概念,这就与看门狗章节中的“硬件看门狗”的提示内容相匹配了。如果Flash选项字配置使能了硬件看门狗(UOB.bit0=0)则在配置过程的参数全部作用于硬件看门狗。
硬件看门狗与默认的软件看门狗不同之处还在于其上电即工作,并不受IWDG模块的IWDT_KEY控制,无需写入0xCCCC启动看门狗,而且复位并不会关闭!复位并不会关闭!复位并不会关闭!
综上,如果在flash选项字配置成“硬件看门狗”则MCU的表现更像是一个外置的看门狗芯片的行为。MCU的任何行为均无法影响到看门狗。大家根据自己的实际项目需要来选择看门狗的具体行为。
最后,特别感谢 @kai迪皮 网友的指点
客气啦,一起学习一起进步 kai迪皮 发表于 2025-7-15 17:30
客气啦,一起学习一起进步
谢谢 大佬支持{:victory:} 我也没有注意过硬件看门狗的概念。
MCU芯片的flash选项字内容只关注了读写保护部分。
向大佬们学习 啊!
看门狗还有这么多的学问啊 我也没有注意到硬件看门狗这个概念。 一直在使用的看门狗怎么还有这么多的隐藏点啊 原来我也是一直在使用软件看门狗啊 我也是一直在使用软件看门狗。
这学问还是蛮多的 学习了。
谢谢大佬们的支持
页:
[1]