CH583 蓝牙例程如何使用HAL_SLEEP睡眠成功

基于平台下载最新的例程CH583EVT,使用的例程是Peripheral,板子使用的是网上购买的最小系统,没有外设,当打开HAL_SLEEP 使能时竟然比不使能功耗还高,默认如果使用3.3V供电,当DCDC_ENABLE使能,HAL_SLEEP不使能,测出来的平均功耗是3.2毫安,继续打开HAL_SLEEP使能时,功耗不降反升,变成平均6毫安。显然不合理吧,如何使用CH58X_LowPower实现LowPower_Halt休眠,尝试修改并不成功,能否提供一个有效例程。且在CH58X_LowPower函数下的睡眠时间检测,似乎永远不满足睡眠?为什么传入唤醒的时间点(RTC绝对值)time要比time_curr大才合理?不应该小吗?

希望能提供一个例程,在蓝牙从机模式下实现睡眠和唤醒,唤醒后蓝牙能正常使用。唤醒一段时间,比如1分钟后再睡眠(此处可以通过蓝牙发送数据,串口数据等建议操作模拟可控睡眠而已)

以下是默认例程的CH58X_LowPower函数


#ifndef DCDC_ENABLE

#define DCDC_ENABLE                         TRUE

#endif

#ifndef HAL_SLEEP

#define HAL_SLEEP                           TRUE




uint32_t CH58X_LowPower(uint32_t time)

{

#if(defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)

    uint32_t time_sleep, time_curr;

    unsigned long irq_status;

    

    SYS_DisableAllIrq(&irq_status);

    time_curr = RTC_GetCycle32k();

    // 检测睡眠时间

    if (time < time_curr) {

        time_sleep = time + (RTC_TIMER_MAX_VALUE - time_curr);

    } else {

        time_sleep = time - time_curr;

    }

    

    // 若睡眠时间小于最小睡眠时间或大于最大睡眠时间,则不睡眠

    if ((time_sleep < SLEEP_RTC_MIN_TIME) || 

        (time_sleep > SLEEP_RTC_MAX_TIME)) {

        SYS_RecoverIrq(irq_status);

        return 2;

    }


    RTC_SetTignTime(time);

    SYS_RecoverIrq(irq_status);

  #if(DEBUG == Debug_UART1) // 使用其他串口输出打印信息需要修改这行代码

    while((R8_UART1_LSR & RB_LSR_TX_ALL_EMP) == 0)

    {

        __nop();

    }

  #endif

    // LOW POWER-sleep模式

    if(!RTCTigFlag)

    {

        LowPower_Halt();

        SetSysClock(CLK_SOURCE_PLL_60MHz);

        //LowPower_Sleep(RB_PWR_RAM2K | RB_PWR_RAM30K | RB_PWR_EXTEND);

        if(RTCTigFlag) // 注意如果使用了RTC以外的唤醒方式,需要注意此时32M晶振未稳定

        {

            time += WAKE_UP_RTC_MAX_TIME;

            if(time > 0xA8C00000)

            {

                time -= 0xA8C00000;

            }

            RTC_SetTignTime(time);

            //LowPower_Idle();

        }

        HSECFG_Current(HSE_RCur_100); // 降为额定电流(低功耗函数中提升了HSE偏置电流)

    }

    else

    {

        return 3;

    }

#endif

    return 0;

}



问题已解决。是库问题,2024年1月的库里面的代码有bug,需要更新2024年3月的库


EVT下载链接:CH583EVT.ZIP - k1体育 - 十年品牌 值得信赖 (wch.cn)
CH582的MCU.c中,注意不要将SelRTCClock做多余配置,最新EVT已修复,如下图

c673f75ff217550b3a41363e5d5e64e.png


只有登录才能回复,可以选择微信账号登录