背景:最近在用stm32L151做一個低功耗項目,經過一系列操作,終於將standby下功耗控制到了5.5uA。但是有個問題,使用WKup引腳喚醒之後,無法再次進入standby模式,而是直接復位。
再次經過一系列操作找到了關鍵點,如下:
1.
這兩個位硬件自動設置,當第一次進入standby模式,並喚醒後,這SBF和WUF被置位,但是hal庫的HAL_PWR_EnterSTANDBYMode(); 函數並沒有對這兩位清零,所以導致後續進入standby模式後。立刻退出。
增加清除操作即可。代碼如下。
void EnterSTANDBYMode(void)
{
PWR->CR|=1<<2; //清除Wake-up 標誌
PWR->CR|=1<<3; //清除待機 標誌
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
__HAL_RCC_PWR_CLK_ENABLE();
HAL_PWR_EnterSTANDBYMode();
}
還有問題就是,不知道什麼原因,下載完程序要重新上電纔可以到達最低功耗。