STM32的低功耗模式


一 待機模式standby和STOP模式的區別:

進入低功耗模式:都一樣,都是先關閉相應時鍾,關閉相應外設,配置相應所有IO口(浮動輸入),然后配置相應的喚醒中斷源,中斷影響的O口,然后調用相應函數進入低功耗模式

進入低功耗模式函數:打開電源管理時鍾,使能喚醒引腳,PWR_EnterSTANDBYMode();//進入待機
                                  //PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI|PWR_STOPEntry_WFE);//進入停機

喚醒中斷:清除所有中斷標志(IO口中斷標志,外設中斷標志,系統喚醒標志),此時有所區別:STOP模式需要重新配置系統時鍾和模塊初始化

退出中斷后:STOP后從中斷處開始執行,各種狀態保存;但standby這是系統復位

二串口喚醒中斷:

2.1RX外中斷法:進入standby模式前先將RX配置成中斷輸入,然后進入低功耗模式,喚醒中斷中將RX配置成串口接收狀態,配置串口然后手動設置接收中斷標志,退出喚醒中斷后立馬進入中斷接收。缺點:會丟失部分字節,所以適合對丟失部分字節不是很敏感的場合。解決辦法:多添加串口協議幀的引導字節

在接收中斷中對開頭引導做兼容處理。

2.2 其它的串口喚醒方法

現象:第一次從stop模式喚醒時串口能正常通信,判斷一段時間后無數據則再一次進入stop mode,然后再一次喚醒,此時串口無法輸出。

最后發現原因是串口重新初始化時HAL_UART_Init()函數中會判斷if(huart->State == HAL_UART_STATE_RESET),此時才會執行HAL_UART_MspInit(huart),配置串口IO口。
解決辦法:每次將UART_HandleTypeDef結構體中的State成員初始化為HAL_UART_STATE_RESET。或者再次初始化之前調用HAL_UART_DeInit()。

三Wakeup引腳的系統中斷:專用的系統喚醒引腳設置成上升沿中斷。

四RTC鬧鈴中斷:

 

在低功耗模式下的看門口處理:看門狗在STOP模式下還在工作,所以還需要不停喂狗,不然看門狗復位,低功耗模式也沒有什么用了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM