打印
[技术问答]

关于华大MCU HC32F005的WDT问题

[复制链接]
3072|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
【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,并执行看门狗复位流程。




627005d2d9910a2ca0.png (81.2 KB )

627005d2d9910a2ca0.png

使用特权

评论回复
板凳
eelux| | 2019-7-16 17:54 | 只看该作者
本帖最后由 eelux 于 2019-7-16 18:35 编辑

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

6666.png (38.33 KB )

6666.png

使用特权

评论回复
地板
一事无成就是我| | 2019-7-16 23:12 | 只看该作者
华大做超低功耗用看门狗是很无奈的,我目前的做法是开启低功耗定时器,程序中用了一个变量记录运行情况,看门狗定时做到比较长,用低功耗定时器做了一个虚拟看门狗,每次判断变量记录对比,如果变化,说明还在主程序里运行,喂狗。否则坐等看门狗复位

使用特权

评论回复
5
ayb_ice| | 2019-7-17 09:13 | 只看该作者
溢出后产生中断就可以了,自己稍加处理可以决定产生软件复位,完成WDT功能

使用特权

评论回复
6
liaotian001| | 2019-7-18 09:32 | 只看该作者
一事无成就是我 发表于 2019-7-16 23:12
华大做超低功耗用看门狗是很无奈的,我目前的做法是开启低功耗定时器,程序中用了一个变量记录运行情况,看 ...

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

使用特权

评论回复
7
一事无成就是我| | 2019-7-18 19:02 | 只看该作者
liaotian001 发表于 2019-7-18 09:32
你好,因为高可靠性MCU,一旦打开,就无法关闭。
请教一下你理想中的WDT是怎么样的?我们后续评估一下, ...

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

使用特权

评论回复
评论
liaotian001 2019-7-19 09:31 回复TA
这个功能PCA WDT可以实现。但缺点是PCA 的WDT 时间太短。 OK,这个功能放在下一代的超低功耗MCU内部,有option 配置 0: 只要打开WDT,任何时刻WDT都不能被停止 1: 只要打开WDT,进入deepsleep, WDT可以被hold计数,一旦唤醒deepsleep,继续计数。 
8
martinhu| | 2019-7-27 12:59 | 只看该作者
一事无成就是我 发表于 2019-7-16 23:12
华大做超低功耗用看门狗是很无奈的,我目前的做法是开启低功耗定时器,程序中用了一个变量记录运行情况,看 ...

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

使用特权

评论回复
9
一事无成就是我| | 2019-7-31 00:19 | 只看该作者
martinhu 发表于 2019-7-27 12:59
目前lptimer最长定时也就2s,WDT可以到50几秒,完全可以把WDT复位时间定长一点,然后lptimer 每隔2秒唤醒 ...

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

使用特权

评论回复
评论
martinhu 2019-8-1 14:01 回复TA
我不是说在中断里喂狗,是中断唤醒,退出中断,然后在主循环里喂狗,只是如果用LPtimer唤醒,时间间隔是2S 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

94

帖子

1

粉丝