找回密码
 立即注册
查看: 111|回复: 6

大家好,请教看门狗的启动问题。

[复制链接]
  • 打卡等级:以坛为家III
  • 打卡总天数:682
  • 最近打卡:2026-04-02 05:45:52

54

主题

259

回帖

1430

积分

金牌会员

积分
1430
发表于 2026-1-28 10:57:27 | 显示全部楼层 |阅读模式
有甲乙两台设备,甲设备的MCU是32G12K128,乙是32G8K48,两台设备通过MODBUS协议的232串口相连(这个貌似与我想说的问题关系不大),两台设备的主频都是12M,程序跑的也都比较快,主循环的周期不到0.1毫秒,所以看门狗的启动时间我设到最小,是65毫秒,看门狗都在主循环中。甲设备的主循环之前,考虑到上电后需要等待电源稳定,有两个200毫秒的阻塞式的延时,乙设备在主循环之前有一个200毫秒的阻塞式延时,甲设备上有复位按键,按下后,给乙设备发出复位命令,甲设备自己启动一个200毫秒的定时(不是阻塞式的延时),乙设备收到复位命令后,执行IAP_CONTR=0x20;        复位,甲设备在定时完成后,自己执行IAP_CONTR=0x20;        复位。看门狗是根据官方例程改的,程序如下:




#define D_EN_WDT            (1<<5)
#define D_CLR_WDT           (1<<4)                                                                           //auto clear

#define D_WDT_SCALE_2       0

void        WATCH_DOG(void)                                                                                               //看门狗65毫秒
{        
        WDT_CONTR = (D_EN_WDT + D_CLR_WDT + D_WDT_SCALE_2);                          // 喂狗
}

现在的问题是,甲设备的复位按键按下后,乙设备可以正常复位,甲设备的复位过程好像有一点问题,它的复位过程貌似是这样的:识别到复位按键按下后,给乙设备发出复位命令,200毫秒后自己执行IAP_CONTR=0x20;        复位,复位开始后,从我写的程序的开头执行,在执行到主循环之前(也就是说本次复位后看门狗还没有跑到),遇到200毫秒的阻塞式的延时后,在延时65毫秒后,看门狗就启动了,于是程序再次从头执行,不过这次看门狗没有启动,程序正常跑起来,也就是说甲设备复位了2次,请问这是为什么?问题估计出在哪里?我把甲设备的喂狗时间改为1秒后,就不存在这个问题了,难道甲设备在第一次复位后,看门狗还仍然有效吗?乙设备为什么不是这样?两个程序都是我写的,我没有记得甲设备的程序什么特别的设定,谢谢大家。

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:725
  • 最近打卡:2026-03-30 12:09:34
已绑定手机

97

主题

7246

回帖

1万

积分

超级版主

积分
13798
发表于 2026-1-28 11:11:10 | 显示全部楼层
看门狗一旦开启无法关闭,除非断电
截图202601281113147246.jpg

点评

我用示波器初步跟踪了下,乙设备加按键后,复位,不出现重复复位情况。  发表于 2026-1-28 11:46
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:682
  • 最近打卡:2026-04-02 05:45:52

54

主题

259

回帖

1430

积分

金牌会员

积分
1430
发表于 2026-1-28 11:20:38 | 显示全部楼层
Debu*** 发表于 2026-1-28 11:11
看门狗一旦开启无法关闭,除非断电

是吗?如是这样,甲乙两设备在执行复位命令后,不停的启动,执行不到主循环,现在的情况是甲设备复位2次后,就进入主循环后正常启动了,乙设备在第一次复位后,正常启动了。这样吧,我把乙设备加上复位按键,在乙设备上按下复位按键后看看是什么情况。
回复

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:90
  • 最近打卡:2026-04-02 10:16:19
已绑定手机

4

主题

245

回帖

885

积分

高级会员

积分
885
发表于 2026-1-28 11:24:11 | 显示全部楼层
你以为看门狗没启动,其实程序中一旦启动看门狗就关不掉了,IAP_CONTR=0x20也不会关看门狗.
建议:软复位前喂狗,进入main时尽快喂狗,阻塞式延时内部喂狗或分成多次小延时分段喂狗.
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:682
  • 最近打卡:2026-04-02 05:45:52

54

主题

259

回帖

1430

积分

金牌会员

积分
1430
发表于 2026-1-28 13:24:23 | 显示全部楼层
Debu*** 发表于 2026-1-28 11:11
看门狗一旦开启无法关闭,除非断电

谢谢版主发的手册,看来是我使用看门狗的方法不对,看了例程就用了,有可能使程序不停的启动。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:682
  • 最近打卡:2026-04-02 05:45:52

54

主题

259

回帖

1430

积分

金牌会员

积分
1430
发表于 2026-1-28 13:26:24 | 显示全部楼层
lcws*** 发表于 2026-1-28 11:24
你以为看门狗没启动,其实程序中一旦启动看门狗就关不掉了,IAP_CONTR=0x20也不会关看门狗.
建议:软复位前喂 ...

谢谢您的回复,我在阻塞式延时中加了喂狗,看门狗没有出现重复启动的情况。
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-4-3 05:05 , Processed in 0.125065 second(s), 72 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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