lxj19901115 发表于 2019-7-16 14:19

关于华大MCU HC32F005的WDT问题

【1】看门狗WDT开启后,无法关闭,而MCU处于深度休眠状态下时,会被WDT复位唤醒,在唤醒后,我需要侦测到如果是WDT复位引起的话,则不需要执行开机动作,而是直接休眠,以达到低功耗的目的
【2】
实际测试情况如下,就是,如果将获取芯片复位的原因的函数 Reset_GetCause
放在主程序下的MAIN函数的第一条语句,则会出现,不管是MCU手动上电还是进入仿真的情况下,stcVal.u8Wdt 这个标志都会置位,导致上电时开机动作不正常。
【3】而如果我将Reset_GetCause 这个函数放入 SystemInit 函数的第一条语句,则开启了看门狗,WDT,但是在芯片休眠后,WDT复位芯片,则无法读取到stcVal.u8Wdt 该标志位1的情况,直接执行开机动作,

smartpower 发表于 2019-7-16 17:44

1. 用户手册中已说明当POR5V或POR15V为1时,其它标志不可信。
2. 用户手册中已说明当查到相应的复位标志后,应将这些标志清零以备下次复位使用。
3. 建议的软件流程:
———a,如果查询到POR5V或POR15V为1,则向RESET_FLAG写入0x00,并执行上电复位流程。
———b,如果查询到POR5V和POR15V均为0,WDT标志为1,则向RESET_FLAG写入0x00,并执行看门狗复位流程。




eelux 发表于 2019-7-16 17:54

本帖最后由 eelux 于 2019-7-16 18:35 编辑

软件的写法流程可以参考下图,谢谢!

一事无成就是我 发表于 2019-7-16 23:12

华大做超低功耗用看门狗是很无奈的,我目前的做法是开启低功耗定时器,程序中用了一个变量记录运行情况,看门狗定时做到比较长,用低功耗定时器做了一个虚拟看门狗,每次判断变量记录对比,如果变化,说明还在主程序里运行,喂狗。否则坐等看门狗复位

ayb_ice 发表于 2019-7-17 09:13

溢出后产生中断就可以了,自己稍加处理可以决定产生软件复位,完成WDT功能

liaotian001 发表于 2019-7-18 09:32

一事无成就是我 发表于 2019-7-16 23:12
华大做超低功耗用看门狗是很无奈的,我目前的做法是开启低功耗定时器,程序中用了一个变量记录运行情况,看 ...

你好,因为高可靠性MCU,一旦打开,就无法关闭。
请教一下你理想中的WDT是怎么样的?我们后续评估一下,集成进入MCU

一事无成就是我 发表于 2019-7-18 19:02

liaotian001 发表于 2019-7-18 09:32
你好,因为高可靠性MCU,一旦打开,就无法关闭。
请教一下你理想中的WDT是怎么样的?我们后续评估一下, ...

理想的是时钟关闭后看门狗就失去时钟停止,一旦外部事件触发则唤醒时钟,自然看门狗就有效了,这个就是理想的,除非你片子昏睡百年醒不来

martinhu 发表于 2019-7-27 12:59

一事无成就是我 发表于 2019-7-16 23:12
华大做超低功耗用看门狗是很无奈的,我目前的做法是开启低功耗定时器,程序中用了一个变量记录运行情况,看 ...

目前lptimer最长定时也就2s,WDT可以到50几秒,完全可以把WDT复位时间定长一点,然后lptimer 每隔2秒唤醒一次喂狗,这样平均功耗应该也在1uA以下,不会感到无奈吧。
看你的做法,其实是在硬件看门狗之外,自己加了一个软件复位的逻辑功能而已。

一事无成就是我 发表于 2019-7-31 00:19

martinhu 发表于 2019-7-27 12:59
目前lptimer最长定时也就2s,WDT可以到50几秒,完全可以把WDT复位时间定长一点,然后lptimer 每隔2秒唤醒 ...

中断里面一般是严禁喂狗的,否则程序跑飞了狗也在逍遥,这个就是加变量的原因,跑一圈则累加一次,这样你喂狗首先要判断是否跑飞,这里软看门狗能直接复位芯片最好,暂时没找到。只能采用非法中断去复位。因为华大的看门狗工作中是不允许你去改动参数的,能改动还可以工作时候狗少吃多喂,睡眠则多吃少喂达到目的,只能变相实现
页: [1]
查看完整版本: 关于华大MCU HC32F005的WDT问题