582F睡眠功耗近50uA,請(qǐng)問(wèn)如何降低?

icon_pdf.gifBTR-C1原理圖.pdf

原理圖已上傳。相關(guān)代碼如下 :


int main(void)

{

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

? ? PWR_DCDCCfg(ENABLE);

#endif

? ? SetSysClock(CLK_SOURCE_PLL_60MHz);

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

? ? GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);

? ? GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);

#endif

……


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

//? cfg.WakeUpTime = WAKE_UP_RTC_MAX_TIME;

//? cfg.sleepCB = CH58X_LowPower; // 啟用睡眠

#endif????????????

這一段程序因?yàn)椴恢绤f(xié)議棧中的睡眠功能如果配置,用樣板程序打印HAL_SLEEP,測(cè)試無(wú)法進(jìn)入睡眠模式,所以刪除了。



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

? ? if(events & HAL_PM_EVENT)

? ? {

? ? ? uint32_t sleep_time_cnt;

? ? ? if (BLEConnected == BLE_PAIRING)

? ? ? ? sleep_time_cnt = PAIRSLEEP_TIME_CNT;

? ? ? else {

? ? ? ? sleep_time_cnt = SLEEP_TIME_CNT;

? ? ? }

//? ? ? ? PRINT("* \n");

//? ? ? if (BLEConnected != BLE_CONNECTING)

? ? ? SleepTimer ++;

? ? ? if (SleepTimer >= sleep_time_cnt)

? ? ? {

? ? ? ? LowPower_Sleep(0);

//? ? ? ? LowPower_Shutdown(0);? ?//本來(lái)想調(diào)用這個(gè)函數(shù)的,但發(fā)現(xiàn)會(huì)不斷的重啟,但調(diào)用?LowPower_Sleep(0);就正常,不知道是什么情況,方便的話也麻煩解答一下,謝謝。

? ? ? }

? ? ? else {

? ? ? ? tmos_start_task(halTaskID, HAL_PM_EVENT, MS1_TO_SYSTEM_TIME(1000));

? ? ? }

? ? ? return events ^ HAL_PM_EVENT;

? ? }

#endif

這一段是我自己加的控制進(jìn)入睡眠模式的代碼,應(yīng)該與這些代碼無(wú)關(guān)。

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

? ? HAL_SleepInit();

? ? SleepTimer = 0;

? ? tmos_start_task( halTaskID, HAL_PM_EVENT, 1000);? ? // 添加一個(gè)監(jiān)測(cè)睡眠任務(wù)

#endif


void HAL_SleepInit(void)

{

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

? GPIOA_ModeCfg( GPIO_Pin_4 |GPIO_Pin_8 |GPIO_Pin_13, GPIO_ModeIN_PU );? ? ? ? ? ? ? ? //初始化IO狀態(tài)

? GPIOA_ITModeCfg( GPIO_Pin_4 |GPIO_Pin_8 |GPIO_Pin_13, GPIO_ITMode_FallEdge );? ? ? ? // 設(shè)置下降沿喚醒

? PFIC_EnableIRQ( GPIO_A_IRQn );? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //開啟GPIO中斷 PA口

? GPIOB_ModeCfg( GPIO_Pin_13, GPIO_ModeIN_PU );? ? ? ? ? ? ? ? //初始化IO狀態(tài)

? GPIOB_ITModeCfg( GPIO_Pin_13, GPIO_ITMode_FallEdge );? ? ? ? // 設(shè)置下降沿喚醒

? PFIC_EnableIRQ( GPIO_B_IRQn );? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //開啟GPIO中斷 PA口


? PWR_PeriphWakeUpCfg( ENABLE, RB_SLP_GPIO_WAKE, Long_Delay );//開啟GPIO喚醒使能

#if 0

? ? sys_safe_access_enable();

? ? R8_SLP_WAKE_CTRL |= RB_SLP_RTC_WAKE; // RTC喚醒

? ? sys_safe_access_enable();

? ? R8_RTC_MODE_CTRL |= RB_RTC_TRIG_EN;? // 觸發(fā)模式

? ? sys_safe_access_disable();? ? ? ? ? ? ? //

? ? PFIC_EnableIRQ(RTC_IRQn);

#endif

#endif

}

客戶希望進(jìn)入睡眠模式后只能通過(guò)按鍵喚醒,所以RTC部分注釋掉了。



您好,50uA的休眠電流,能否看出是平均電流還是休眠底電流。

如果是平均電流,可以檢查一下是不是還有哪些TMOS事件循環(huán)沒(méi)有注釋掉。

如果說(shuō)TMOS事件循環(huán)都關(guān)掉了,是底電流高,大概是GPIO漏電導(dǎo)致的。休眠前要將GPIO配置為和休眠期間的外部電平接近的輸入上拉/輸入下拉,固定電平以減小漏電。未接出的引腳配置為輸入上拉即可。測(cè)功耗時(shí)注意要拔掉除了電源線兩根線之外的其他線材,包括USBtypeC數(shù)據(jù)線和接串口模塊打印的杜邦線。

如果喚醒后需要執(zhí)行無(wú)線通信,建議先執(zhí)行一次RF校準(zhǔn)事件,即halTaskID下的HAL_REG_INIT_EVENT事件。

使用LowPower_Shutdown(0);這個(gè)函數(shù)會(huì)使MCU進(jìn)入shutdown休眠,shutdown也支持GPIO喚醒和RTC喚醒,但特性是喚醒后會(huì)復(fù)位MCU,功耗相比sleep更低。


感謝您的回復(fù)。


LowPower_Shutdown(0);為什么會(huì)重啟?應(yīng)該不是喚醒的原因,如果是,那么LowPower_Sleep(0);的表現(xiàn)應(yīng)該也會(huì)不斷的喚醒吧?


另外您提到的TMOS事件注釋掉,應(yīng)該如何操作呢?


還有咱們協(xié)議棧中的睡眠功能如何配置?好象只是簡(jiǎn)單的設(shè)置HAL_SLEEP為TRUE,不能實(shí)現(xiàn)睡眠功能。


不好意思,以前沒(méi)有怎么接觸過(guò)咱們的芯片,請(qǐng)多指教,謝謝



①shutdown休眠,喚醒后復(fù)位是特性;sleep休眠,喚醒后不會(huì)復(fù)位。

image.png

②TMOS事件有一部分是循環(huán)的,包括應(yīng)用層的代碼和庫(kù)中的(比如說(shuō)BLE廣播,是由協(xié)議棧管理的,每隔一定時(shí)間發(fā)包)代碼,測(cè)最低功耗時(shí)要關(guān)掉非必要的循環(huán),關(guān)閉方法可以是直接注釋掉相應(yīng)的代碼塊,或者使用tmos_stop_task(),或者使用各種特定的方式關(guān)閉庫(kù)中的循環(huán),要看具體問(wèn)題。

③跑BLE代碼或者RF_PHY代碼,一般情況下是只要置1使能HAL_SLEEP宏,讓協(xié)議棧管理休眠就好。如果使能HAL_SLEEP宏前后沒(méi)有功耗變化,檢查是否成功啟用了改宏,是否有執(zhí)行到CH58X_LowPower內(nèi)部。


那為什么會(huì)喚醒呢?喚醒才重啟這個(gè)我知道,但如果是因?yàn)閱拘训脑挘?span style="color:rgb(51,51,51);">LowPower_Sleep(0);進(jìn)入的應(yīng)該也會(huì)喚醒吧?


協(xié)議棧的睡眠模式?jīng)]能正常工作,沒(méi)有執(zhí)行到CH58X_LowPower內(nèi)部,但是什么原因呢?


您好,排查代碼中是否有期望外的喚醒芯片的代碼,sleep休眠支持RTC喚醒和GPIO喚醒,TMOS系統(tǒng)的喚醒屬于RTC喚醒。

檢查是否注釋掉了所有TMOS事件。如果啟用HAL_SLEEP后,協(xié)議棧檢測(cè)到所有TMOS事件都停止了,不會(huì)進(jìn)入休眠,協(xié)議棧需要拿到下一次喚醒的時(shí)間點(diǎn),確保芯片有機(jī)會(huì)會(huì)被喚醒,不會(huì)一直休眠下去;如果業(yè)務(wù)邏輯中不需要每隔一段時(shí)間循環(huán)執(zhí)行操作,可以自定義一個(gè)間隔23小時(shí)喚醒一次的事件,醒來(lái)后什么邏輯都不必執(zhí)行,只是用于另TMOS系統(tǒng)能夠正常休眠。

檢查一下config.h中的HAL_SLEEP是否為灰色,若為灰色則表示此處宏配置不生效,需要在工程配置中修改。

2773877-20220823173402804-1668195416.png

2773877-20220823173840388-1573335845.jpg


感謝回復(fù),我先試試,有不明白的再請(qǐng)教。謝謝!


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

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