打印
[方案相关]

华大单片机HC32L072KATA低功耗调试笔记

[复制链接]
2765|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
louliana|  楼主 | 2024-4-18 11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

随着电子产品的越来越普及,尤其是很多电子产品都用上了电池供电,那么我们就不得不考虑电池的续航能力的问题,从而,我们必须要考虑电子产品功耗的问题。因为功耗直接关系到电池充一次电或换次干电池能使用多久的问题。大家都知道电池类的电子产品工作状态所占的时间只是很小很小很小的一部分,其余的时间产品都处于休眠待机状态。休眠待机状态的功耗直接影响电池的使用时间。

华大单片机因其出色的超低功耗特性,在有低功耗需求的使用场景中更具有优势。现在以HC32L136手册为例,我们可以看到当芯片进入深度休眠时,3V供电的时候功耗只有0.5uA。更可贵的是RAM和CPU的数据会保持,唤醒后直接就可以运行。

可以通过设置如下相关的位来设置以何种形式进入低功耗

SLEEPDEEP : 如果SLEEPDEEP 位被置位,执行休眠指令后会进入深度休眠,此时为超低功耗,SLEEPDEEP 位被清除,则进入普通休眠;
SLEEP-NOW: 如果 SLEEPONEXIT 位被清除,当 WFI 或 WFE 被执行时,微控制器立即进入休眠模式;
SLEEP-ON-EXIT: 如果 SLEEPONEXIT 位被置位,系统从最低优先级的中断处理程序中退出时,微控制器就立即进入休眠模式;

如何退出深度休眠模式:

如果执行 WFI 指令进入休眠模式,任意一个被嵌套向量中断控制器响应的外设中断(Deep Sleep 下可运行的 周边模块中断)都能将系统从休眠模式唤醒。

进入休眠之前芯片相关端口的设置如下

没有使用的IO: 同一系列的芯片按最大引脚数来设置,没有引出来的引脚也要设置,在进入deepsleep或者sleep之前,可以配置为上拉输入,或者输出低电平;
已经使用的输出的引脚: 保持输出电平和外部电路等电势,或者改为输入;
已经使用的输入引脚: 外部电路有确定的电平,可以保持输入状态(外部有上拉或者下拉的,内部可以不设上下拉);
ADC的引脚: 还是保持ADC的属性(GPIO的ADS使能,init函数不需要(init函数可能会把ADS清零));
使用到的LCD相关引脚: 配置为模拟端口。

功耗实测

使用HC32L110和HC32L136的开发板对深度休眠进行测试,测试发现在深度休眠时两个芯片的功耗都在0.4uA以下,而且相当稳定。测试图如下


使用特权

评论回复
沙发
610u| | 2024-4-30 09:41 | 只看该作者
保持ADC的属性(GPIO的ADS使能,init函数不需要(init函数可能会把ADS清零));

使用特权

评论回复
板凳
qgy1007| | 2024-6-12 09:35 | 只看该作者
目前使用的是gpio的低功耗例程,在HC32L136K8TA最小开发板上测试功耗始终降不下去,查看过寄存器bgr和adc这些外设都已关闭,我达不到10ua以内,最小只可以达到369ua,求指导一下还该咋样配置代码:
int32_t main(void)
{
    delay1ms(5000);

    ///< 配置Demo板上所有不使用的IO为高阻输入,避免端口漏电
    App_LowPowerModeGpioSet();


    ///< 进入低功耗模式——深度休眠(使能唤醒后退出中断自动休眠特性)
    Lpm_GotoDeepSleep(TRUE);

    while(1)
    {
        ;
    }
}

static void App_LowPowerModeGpioSet(void)
{
    ///< 打开GPIO外设时钟门控
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);

    //swd as gpio
    Sysctrl_SetFunc(SysctrlSWDUseIOEn, TRUE);

    ///< 配置为数字端口
    M0P_GPIO->PAADS = 0;
    M0P_GPIO->PBADS = 0;
    M0P_GPIO->PCADS = 0;
    M0P_GPIO->PDADS = 0;

    ///< 配置为端口输入
    M0P_GPIO->PADIR = 0XFFFF;
    M0P_GPIO->PBDIR = 0XFFFF;
    M0P_GPIO->PCDIR = 0XFFFF;
    M0P_GPIO->PDDIR = 0XFFFF;

    ///< 输入上拉
    M0P_GPIO->PAPD = 0xFFFF;
    M0P_GPIO->PBPD = 0xFFFF;
    M0P_GPIO->PCPD = 0xFFFF;
    M0P_GPIO->PDPD = 0xFFFF;
}

使用特权

评论回复
地板
亚瑟| | 2024-6-28 19:31 | 只看该作者
0.4ua这么低?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

1124

帖子

1

粉丝