deepsleep_wdt例程¶
1 功能概述¶
这是一个 DEEPSLEEP&WDT 代码例程,旨在演示如何配置和使用嵌入式系统中的看门狗 (WDT) 功能,并在 DEEPSLEEP 睡眠模式下进行测试。该代码例程实现了以下功能:
配置看门狗定时器的超时时间为50ms。
将MCU设置为 DEEPSLEEP 睡眠模式,使其进入低功耗状态。
在MCU运行时,看门狗定时器定时监测MCU的状态。
当MCU进入 DEEPSLEEP 睡眠模式时,看门狗定时器停止监测,直到MCU重新唤醒。
如果在MCU唤醒后没有喂狗动作,那么MCU将在连续三次唤醒后被看门狗复位。
通过该代码例程的演示,用户可以了解如何在嵌入式系统中配置和使用看门狗功能,以及如何在低功耗状态下保持系统的稳定性。
注:KEY1对应P1_5;RGB蓝色指示灯对应P1_2
2 环境要求¶
Board: PAN2628b1_evb
将 J17 单刀双掷开关拔至PWM1侧,将P1_2与RGB蓝色指示灯控制引脚相连
KEY1 独占 P1_5,不需要拔开关
3 编译和烧录¶
例程位置:pan2628_dk/01_SDK/example_extension/deepsleep_wdt
打开目录下keil下的deepsleep_wdt.uvprojx工程,编译整个代码工程。
注意:烧写此工程代码后,若要再次烧写代码必须要按下RST KEY后2秒内进行烧写,否则MCU进入低功耗后,无法进行代码烧写。
4 演示说明¶
根据环境要求一节的介绍,正确连接 EVB 开发板的跳线,编译、下载代码后:
等待蓝色LED熄灭,大约2秒时间,由于MCU进入deepsleep状态后,无法进行烧写,这个2秒时间是留给再次烧写代码的时间窗口
在不按KEY1的情况下观察蓝色led工作状态,大约1秒时间蓝色led灯亮一次,表示MCU被WakeupCounter唤醒
设置看门狗定时间约为50ms:
WDT_Init(WDT_DIV_4, WDT_TIMEOUT_MS(50));
。如果每次醒来不进行喂狗动作,则醒来三次MCU就会复位,log如下图:
如果每次醒来后进行喂狗动作,MCU可以一直睡眠和运行交替下去,不会复位,log如下图:
5 开发说明¶
通过调用 lp.c中的
LP_ExIntSourceSelect()、WakeupGpioConfig()、LP_WakeCounterConfig()
等函数接口来实现低功耗功能,详细请查阅代码。
/** Config EXTERN_INT0/1 as wakeup interrupt */
LP_ExIntSourceSelect(INT_SEL_WAKEUP);
/** Config P15 as wakeup pin */
LP_WakeupGpioConfig(GPIO_PORT1, GPIO_Pin_5, GPIO_LOW);
LP_WakeupGpioEnable(GPIO_PORT1, GPIO_Pin_5, ENABLE);
LP_WakeCounterConfig(CNT_1024000_US, WAKEUP_CNT_ONESHOT);
LP_WakeupCounterStart();
例程中的wdt相关代码如下:
WDT_Init(WDT_DIV_4, WDT_TIMEOUT_MS(50));
printf("Deepsleep&wdt test.\r\n");
while(1)
{
LP_WakeCounterConfig(CNT_1024000_US, WAKEUP_CNT_ONESHOT);
LP_WakeupCounterStart();
/** Wait for gpio P1_6 to low level interrupt mode */
while(GpioWakeLevel != LEVEL_LOW)
{
WDT_Feed(); /**< 有时候用户的按下的时间比较长,这里要喂狗,防止MCU复位 */
}
RCC_PeriphClockCmd(RCC_PERIPH_WDT, DISABLE); /**< Turn off watchdong before entern deepsleep */
DeepsleepConfig();
LP_GotoDeepsleep();
RCC_PeriphClockCmd(RCC_PERIPH_WDT, ENABLE); /**< Turn on watchdong after mcu wakeup */
RCC_SysClkInit();
P1_2 = LED_ON;
DelayMs(10);
P1_2 = LED_OFF;
printf("Mcu wakeup.\r\n");
// WDT_Feed(); /**< 这里如果不喂狗,用户也不按下KEY1, 大约MCU醒来3次后就看门狗超时复位了 */
}
6 RAM/Flash资源使用情况¶
Program Size: data=37.2 xdata=0 const=44 code=2912