【AT-START-L021测评】基于深度睡眠的低功耗测试
本帖最后由 小宏121 于 2024-12-30 09:42 编辑雅特力的AT-START-L021开发板拿到手是这样的,打算测试一下这MCU的低功耗是否和手册描述的一样
板子上供电有两种电压,分别是1.8V和3.3V,通过排针JP2选择
测试时把功耗分析仪接到JP2的2号脚就可以了
根据MCU AT32L021手册描述,在1.71V的时候功耗能达到8.54uA,就选择1.8V来测试
下面就开始测试
1、从雅特力官网下载资料
AT32L021的资料网址:https://www.arterytek.com/cn/product/AT32L021.jsp#Resource
我选择用Keil MDK来调试代码,所以下载好pack和官方例程就够了
2、测试官方的例程
这里我选择串口1低功耗唤醒的例程,路径如下
AT32L021_Firmware_Library_V2.0.6_ZH\project\at_start_l021\examples\pwc\deepsleep_usart1
deepsleep_usart1例程的内容:上电后LED会点亮,延时300ms熄灭LED再给串口1发送字符串、从外置时钟源切换到内置高速时钟源、减少内置LDO电压为1.0V后就进入低功耗模式的深度睡眠模式,之后如果串口1的RX有数据到来就触发唤醒,然后LED亮起、提高内置LDO电压为1.2V,恢复为外置时钟源后再打印字符串。
int main(void)
{
__IO uint32_t index = 0;
__IO uint32_t systick_index = 0;
/* enable pwc clock */
crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK, TRUE);
/* congfig the system clock */
system_clock_config();
/* init at start board */
at32_board_init();
/* turn on the led light */
at32_led_on(LED2);
at32_led_on(LED3);
at32_led_on(LED4);
delay_ms(300);
/* config usart1 */
usart1_config(2400);
usart1_wakeup_config();
printf("exit deepsleep mode by usart1 rdbf interrupt \r\n");
while(1)
{
at32_led_off(LED2);
printf("now enter deepsleep mode \r\n");
/* make sure that no usart receiver is ongoing */
while(usart_flag_get(USART1, USART_OCCUPY_FLAG) == SET)
{
}
/* select system clock source as hick before ldo set */
crm_sysclk_switch(CRM_SCLK_HICK);
/* wait till hick is used as system clock source */
while(crm_sysclk_switch_status_get() != CRM_SCLK_HICK)
{
}
/* reduce ldo before enter deepsleep mode */
pwc_ldo_output_voltage_set(PWC_LDO_OUTPUT_1V0);
while(usart_flag_get(USART1, USART_TDC_FLAG) == RESET)
{
}
/* congfig the voltage regulator mode.only used with deep sleep mode */
pwc_voltage_regulate_set(PWC_REGULATOR_LOW_POWER);
/* enter deep sleep mode */
pwc_deep_sleep_mode_enter(PWC_DEEP_SLEEP_ENTER_WFI);
/* turn on the led light */
at32_led_on(LED2);
/* resume ldo before system clock source enhance */
pwc_ldo_output_voltage_set(PWC_LDO_OUTPUT_1V2);
/* wake up from deep sleep mode, congfig the system clock */
system_clock_recover();
/* wake up from sleep mode */
printf("\r\nnow exit deepsleep mode by usart1 rdbf interrupt \r\n");
printf("usart1_rdne_data = 0x%x\r\n", usart1_index);
delay_ms(300);
}
}该例程实测进入低功耗时的功耗如图,电流是258uA,远远大于手册中描述的8.54uA
于是我查看手册
MCU进入低功耗深度睡眠模式时,手册描述了LDO、PLL、内部和外部时钟源都会关闭,但是GPIO的模式保持进入深度睡眠模式之前不变,
而且258uA远小于运行模式时和睡眠模式PLL开启时的电流,所以可以确定MCU已经进入低功耗深度睡眠模式了,那么只剩下GPIO配置的原因导致功耗偏高。
运行模式时的电流
睡眠模式PLL开启时的电流
3、修改官方例程
在进入深度睡眠模式之前,把GPIO配置为模拟输入可以最省电,这里我直接把GPIO和串口配置的代码都屏蔽了
重新烧录,1.8V供电测试,测试功耗已经和手册描述的8.54uA十分接近
至此,测评结束。
赞,我用万用表测deepsleep模式电流0.13mA,还没细查比官方数据差的原因,从你这里有启发 详细介绍了AT-START-L021开发板及其OLED显示功能,涵盖了硬件规格、软件配置和实际操作等多个方面。 作者分享了具体的资源链接和所需下载的文件,如Keil MDK的pack和官方例程,这大大简化了其他开发者复现测试过程的工作。 依据 AT32L021 手册描述,对不同电压下的功耗进行了分析 详细说明了供电电压的选择和功耗分析仪的连接方式 内容涉及较多技术细节,但作者用通俗易懂的语言进行了讲解,使得即使是初学者也能轻松理解。 帖子为读者提供了详细的操作步骤和测试方法,无论是硬件连接还是软件调试,都能让读者快速上手。作者在介绍例程时,不仅描述了例程的功能,还分享了测试过程中的注意事项和经验,使读者能够更好地进行测试和开发工作。 对官方例程的介绍详细且具体,如串口 1 低功耗唤醒例程,描述了其功能:上电后 LED 点亮,延时 300ms 熄灭 LED,发送字符串,切换到内置高速时钟源,降低内置 LDO 电压进入低功耗模式深度睡眠,当串口 1RX 有数据到来时触发唤醒,LED 亮起,提高内置 LDO 电压恢复为外置时钟源并打印字符串。这使得读者能够快速了解例程的功能和实现过程,对实际应用具有很大的帮助。 对于开发低功耗应用具有重要的指导意义。 介绍了板子上供电电压的情况,包括两种电压(1.8V 和 3.3V)以及通过排针 JP2 进行选择的方式,这对于读者了解硬件环境和进行相关测试至关重要。同时,明确指出测试时将功耗分析仪接到 JP2 的 2 号脚,为读者提供了实际操作的指导。 介绍了测试前的准备工作,包括下载必要的软件和例程,以及如何配置开发环境 涉及到从外置时钟源切换到内置高速时钟源、降低内置 LDO 电压等技术细节 选择了串口1低功耗唤醒的例程进行测试,这个实例不仅展示了AT32L021的低功耗特性,还体现了其在实际应用中的唤醒机制。 如何选择供电电压、如何连接功耗分析仪以及如何下载和使用官方例程 xhackerustc 发表于 2024-12-28 22:10
赞,我用万用表测deepsleep模式电流0.13mA,还没细查比官方数据差的原因,从你这里有启发 ...
应该是有IO漏电,,没处理好 烧录口会不会漏电,都屏蔽会不会没法烧录 我喜欢打游戏 发表于 2025-1-8 15:59
烧录口会不会漏电,都屏蔽会不会没法烧录
启动前加个2s~5s的延时 对于初学者来说,这样的详细介绍非常有帮助,能够快速了解和上手这款开发板。 高质量的资源,对于那些对AT32L021微控制器感兴趣或者正在寻找相关测试指导的读者来说,是非常有价值的。
页:
[1]
2