[APM32E0] 独立看门狗还有硬件与软件之分?这么多年才知道

[复制链接]
 楼主| 发表于 2025-7-15 16:50 | 显示全部楼层 |阅读模式
在逛论坛的时候,看到有人讨论看门狗的启动,点开帖子一阅。一直以为挺普通的独立看门狗(IWDG)突然变得不普通,彰显了其英雄本色。

独立看门狗的功能特性非常简单与专一。打开后,必须喂狗。未按时喂狗则会引发系统复位,很简单,很实用。用法也非常简单:计算一下while(1)中各项工作的时长,将看门狗的周期设置略大于此时长。这样就能保证在各项工作完成之后,可以喂狗成功。当意外情况发生后,看门狗也能及时响应系统的异常,实现系统复位操作。

我们以极海APM32E030为例,官方的SDK已经有现成的示例参考程序可以使用。这里简单附上代码,方便大家阅读(代码中的中文部分为我添加内容)

  1. void IWDTInit()
  2. {
  3.     /* clear IWDTRST Flag*/
  4.     if (RCM_ReadStatusFlag(RCM_FLAG_IWDTRST) != RESET)
  5.     {
  6.         RCM_ClearStatusFlag();
  7.     }
  8.     /* set IWDT Write Access */
  9.     IWDT_EnableWriteAccess();
  10.     /* set IWDT Divider 调整喂狗周期时长 */
  11.     IWDT_ConfigDivider(IWDT_DIV_64);
  12.     /* set IWDT Reloader 只有12位有效 */
  13.     IWDT_ConfigReload(40000 / 32);
  14.     /* Refresh */
  15.     IWDT_Refresh();
  16.     /* Enable IWDT */
  17.     IWDT_Enable();
  18. }
  19. void IWDT_Feed(void)
  20. {
  21.     IWDT_Refresh();
  22. }
其实以上并不是本次帖子的主要目的,主要目的是独立看门狗的配置里是分两个部分:一部分是我们现在讲到的最常见的部分,启动和周期性喂狗。而另一部分则是硬件看门狗部分,是由MCU的选项字控制的。在Flash控制器的选项字节功能描述章节,即UOB字体的bit位0: WDTSEL,来标识当前启动的硬件看门狗,还是软件看门狗。

到这里引入了“硬件看门狗”的概念,这就与看门狗章节中的“硬件看门狗”的提示内容相匹配了。如果Flash选项字配置使能了硬件看门狗(UOB.bit0=0)则在配置过程的参数全部作用于硬件看门狗。

硬件看门狗与默认的软件看门狗不同之处还在于其上电即工作,并不受IWDG模块的IWDT_KEY控制,无需写入0xCCCC启动看门狗,而且复位并不会关闭!复位并不会关闭!复位并不会关闭!

综上,如果在flash选项字配置成“硬件看门狗”则MCU的表现更像是一个外置的看门狗芯片的行为。MCU的任何行为均无法影响到看门狗。大家根据自己的实际项目需要来选择看门狗的具体行为。

最后,特别感谢 @kai迪皮 网友的指点



发表于 2025-7-15 17:30 | 显示全部楼层
客气啦,一起学习一起进步
 楼主| 发表于 2025-7-15 18:14 | 显示全部楼层
kai迪皮 发表于 2025-7-15 17:30
客气啦,一起学习一起进步

谢谢 大佬支持
发表于 2025-7-15 20:59 | 显示全部楼层
我也没有注意过硬件看门狗的概念。
MCU芯片的flash选项字内容只关注了读写保护部分。
向大佬们学习
发表于 2025-7-16 10:27 | 显示全部楼层
啊!
看门狗还有这么多的学问啊
发表于 2025-7-17 19:52 | 显示全部楼层
我也没有注意到硬件看门狗这个概念。
发表于 2025-7-17 22:42 | 显示全部楼层
一直在使用的看门狗怎么还有这么多的隐藏点啊
发表于 2025-7-21 15:23 | 显示全部楼层
原来我也是一直在使用软件看门狗啊
发表于 2025-7-21 17:22 | 显示全部楼层
我也是一直在使用软件看门狗。
这学问还是蛮多的
发表于 2025-7-25 10:33 | 显示全部楼层
学习了。
谢谢大佬们的支持
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

29

帖子

0

粉丝
快速回复 返回顶部 返回列表