Q80351951 发表于 2025-8-7 09:45

HC32L021每秒2次RTC唤醒,电流大



新产品,要求电池供电,低功耗,从淘宝买的HC32L021,程序每秒2次RTC唤醒,电流50ua,外围也没啥耗电的,外置低频32768给RTC.
外围电路也检查过没问题,这电流太大了,低功耗还有啥注意的,
void in_sleep(void)
{
   // printf("\r\n---------------------------------------");
// SYSCTRL_PeriphClockDisable(PeriphClockLpuart1);
    FLASH_LowPowerEnable(); /* 配置FLASH为低功耗模式 */
    LPM_GotoDeepSleep(FALSE);//唤醒后不再自动进入深度睡眠
    FLASH_LowPowerDisable();
//SYSCTRL_PeriphClockEnable(PeriphClockLpuart1);
    sleep_count++;
}

void SysClockConfig(void)
{
    stc_sysctrl_clock_init_t stcSysClockInit = { 0 };

    /* 结构体初始化 */
    SYSCTRL_ClockStcInit(&stcSysClockInit);

    stcSysClockInit.u32SysClockSrc = SYSCTRL_CLK_SRC_RC48M_6M; /* 选择系统默认RC48M 6MHz作为Hclk时钟源 */
    stcSysClockInit.u32HclkDiv = SYSCTRL_HCLK_PRS_DIV1;    /* Hclk 1分频 */
    SYSCTRL_ClockInit(&stcSysClockInit);                     /* 系统时钟初始化 */
}
void XTL_ClockConfig(void)
{
    SYSCTRL_XTLDrvConfig(SYSCTRL_XTL_AMP3, SYSCTRL_XTL_DRV3); /* 设置XTL晶振参数,使能目标时钟,SYSTEM_XTL = 32768Hz */
    SYSCTRL_XTLStableTimeSet(SYSCTRL_XTL_STB_CYCLE16384);   /* 置XTL稳定等待时间 */

    printf("\r\n打开XTL ");
    SYSCTRL_ClockSrcEnable(SYSCTRL_CLK_SRC_XTL);            /* 使能XTL时钟 */
}

wubangmi 发表于 2025-8-7 16:03

3300/50=66K,按你说的外设没有耗电的东西,这66K就是内部上拉电阻,你代码里应该使能了某个GPIO的上拉,然后你可能输出了低,算下来就差不多这个功耗了。

xch 发表于 2025-8-7 18:26

外设全拆了看看,或者淘宝上买核心板调试低功耗

xch 发表于 2025-8-7 18:49

改一下一秒唤醒一次看看电流变化。扰动法,看看是不是关它屁事

alienmiller 发表于 2025-8-8 10:33

用过类似的 HC32L130,当时低功耗做到3uA左右。优化外围端口,关闭内部不必要的组件。

wyde518 发表于 2025-8-11 09:51

第一,看看休眠后,外围器件是不是消耗过多
第二,看看唤醒后,程序都在干啥
第三,楼上有个说的不多,改成1秒看看,是不是电流再变化

Q80351951 发表于 2025-9-12 13:55

搞定了

tpgf 发表于 2025-9-13 13:49

若未在唤醒后清除RTC或电源管理相关的中断标志,可能导致后续无法正常进入低功耗模式,从而持续消耗较高电流

caigang13 发表于 2025-9-15 23:47

没用的GPIO一定要按照手册要求进行配置
页: [1]
查看完整版本: HC32L021每秒2次RTC唤醒,电流大