MCU 休眠死机彻底起不来?RTC 定时唤醒喂狗完美解决低功耗看门狗难题
简介
低功耗类的设备有一些MCU是没办法运行看门狗的,有一些是可以运行看门狗但没办法喂狗。
那么MCU进入低功耗模式下,看门狗不运行,如果在低功耗模式的时候一旦死机,软件就彻底崩溃了,就起不来了,这样风险就很大。
一、休眠状态,如何加看门狗?
我之前用过的一些单片机,像东软的8为单片机低功耗状态下需要关闭看门狗,唤醒的时候才可以运行,所以一般做法是进入低功耗之前先关闭看门狗,唤醒之后再开启看门狗,这种单片机设计就存在一定的风险,只能做取舍。
像ST的单片机低功耗模式下也可以运行看门狗,但是低功耗不能喂狗,所以采取的做法就是调用RTC时钟设定闹钟去唤醒设备执行喂狗,喂狗之后设备再次进入低功耗,这样设计的缺点是需要一直唤醒设备去喂狗,增加软件的复杂度和牺牲一点电量,优点是软件如果在休眠状态崩溃,会因为一直不唤醒喂狗而软件产生复位,增强软件的抗风险能力。
我之前有用过STM32G0系列的单片机就是采用这种设计模式,看门狗喂狗时间最大设置8秒,RTC闹钟设置为6秒,每间隔6秒设备就会自动唤醒去喂狗,喂狗之后设备立即进入休眠,功耗上的体现就是本来是200uA,会突然跳一下到几十mA,然后又稳定到200uA。
二、代码实现
代码实现也比较简单,RTC可以采用STM32CubeMX进行配置,然后在主循环里面执行喂狗的操作,代码如下:
三、总结
低功耗设备设计的时候一定要考虑软件的鲁棒性,有些设备运行的环境有射频、电机等复杂环境,虽然看起来死机可能性很小,但是一旦量大之后,就有可能会出现一些,所以,设计上考虑一定要严谨,从设计之初就要考虑软件加入一些防御性设计,来预防这种风险出现之后失控。
