CH583 藍(lán)牙例程如何使用HAL_SLEEP睡眠成功

基于平臺下載最新的例程CH583EVT,使用的例程是Peripheral,板子使用的是網(wǎng)上購買的最小系統(tǒng),沒有外設(shè),當(dāng)打開HAL_SLEEP 使能時竟然比不使能功耗還高,默認(rèn)如果使用3.3V供電,當(dāng)DCDC_ENABLE使能,HAL_SLEEP不使能,測出來的平均功耗是3.2毫安,繼續(xù)打開HAL_SLEEP使能時,功耗不降反升,變成平均6毫安。顯然不合理吧,如何使用CH58X_LowPower實現(xiàn)LowPower_Halt休眠,嘗試修改并不成功,能否提供一個有效例程。且在CH58X_LowPower函數(shù)下的睡眠時間檢測,似乎永遠(yuǎn)不滿足睡眠?為什么傳入喚醒的時間點(RTC絕對值)time要比time_curr大才合理?不應(yīng)該小嗎?

希望能提供一個例程,在藍(lán)牙從機模式下實現(xiàn)睡眠和喚醒,喚醒后藍(lán)牙能正常使用。喚醒一段時間,比如1分鐘后再睡眠(此處可以通過藍(lán)牙發(fā)送數(shù)據(jù),串口數(shù)據(jù)等建議操作模擬可控睡眠而已)

以下是默認(rèn)例程的CH58X_LowPower函數(shù)


#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晶振未穩(wěn)定

? ? ? ? {

? ? ? ? ? ? time += WAKE_UP_RTC_MAX_TIME;

? ? ? ? ? ? if(time > 0xA8C00000)

? ? ? ? ? ? {

? ? ? ? ? ? ? ? time -= 0xA8C00000;

? ? ? ? ? ? }

? ? ? ? ? ? RTC_SetTignTime(time);

? ? ? ? ? ? //LowPower_Idle();

? ? ? ? }

? ? ? ? HSECFG_Current(HSE_RCur_100); // 降為額定電流(低功耗函數(shù)中提升了HSE偏置電流)

? ? }

? ? else

? ? {

? ? ? ? return 3;

? ? }

#endif

? ? return 0;

}



問題已解決。是庫問題,2024年1月的庫里面的代碼有bug,需要更新2024年3月的庫


EVT下載鏈接:CH583EVT.ZIP - 南京沁恒微電子股份有限公司 (wch.cn)
CH582的MCU.c中,注意不要將SelRTCClock做多余配置,最新EVT已修復(fù),如下圖

c673f75ff217550b3a41363e5d5e64e.png


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频