当前文档版本为 v0.4.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

deepsleep_adc例程

1 功能概述

本例程主要演示如何在MCU的低功耗应用场景下,同时进行ADC采样和XTH启动过程,实现低功耗且高效率的应用。该例程利用EVB ADC,实现了20次采样后取平均的方式,来保证ADC采样的准确性。同时,通过将ADC采样过程与XTH启动过程同时进行,实现了在低功耗模式下,有效地节省了MCU醒来后的活动时间,从而减少了功耗。最终达到了低功耗且高效率的应用目的。

如果您有任何关于该例程的问题或需要帮助,可以随时提出。

注:KEY1对应P1_5;RGB蓝色指示灯对应P1_2

2 环境要求

  • Board: PAN2628b1_evb

  • 将 J15 单刀双掷开关拔至ADC侧,将P3_3与可调电位器输出引脚相连

  • 将 J17 单刀双掷开关拔至PWM1侧,将P1_2与RGB蓝色指示灯控制引脚相连

  • 将 J19 单刀双掷开关拔至TX侧,将P3_1与uart的TX引脚相连

  • KEY1 独占 P1_5,不需要拔开关

3 编译和烧录

例程位置:pan2628_dk\01_SDK\example_basic\lp\deepsleep_adc

打开目录下keil下的deepsleep_adc.uvprojx工程,编译整个代码工程。

注意烧写此工程代码后,若要再次烧写代码必须要按下RST KEY后2秒内进行烧写,否则MCU进入低功耗后,无法进行代码烧写

4 演示说明

根据环境要求一节的介绍,正确连接 EVB 开发板的跳线,编译、下载代码后:

  1. 等待蓝色 LED 熄灭,大约需要 2 秒时间。由于 MCU 进入深度睡眠后,无法进行编程,这 2 秒时间留给再次编程的时间窗口。

  2. 在不按 KEY1 的情况下观察蓝色 LED 工作状态,大约 4 秒时间蓝色 LED 灯闪烁一次,表示 MCU 被 WakeupCounter 唤醒,唤醒后触发一次 ADC 电压采样(一次采样20次取平均)。

  3. 不断按下 KEY1,触发一次 ADC 电压采样,观察蓝色 LED 灯是否被 KEY1 事件点亮。

串口log如下图:

image-20230331124543095

5 开发说明

通过调用 lp.c和adc.c中的相关函数接口来实现低功耗应用下的ADC采样功能,详细请查阅代码例程。

 /** 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_4096000_US, WAKEUP_CNT_ONESHOT);
 LP_WakeupCounterStart();

 /**< Turn on the xtal, no need to wait for it to be ready. */
 RCC_XTALTurnOnNoneBlock(); 

 ANA_IPOLY_ON(); /**< ADC relies on the IPLOY power supply to work. */
 ChannelVolt = UsrGetChannelVolt(ADC_CH3, 20); /**< Sample ADC data using RCH as the clock source. */
 RCC_SysClkInit();

6 RAM/Flash资源使用情况

Program Size: data=42.2 xdata=28 const=26 code=5450