STM32F0系列——停機模式(低功耗)


這段時間正在磨一個項目,要求系統中STM32F0系列的芯片不工作時處於一個低功耗,要用幾個月,所以需要研究下stm32F0的低功耗模式。

經過了解,STM32F0芯片與其他STM32F1系列一樣,有休眠(Sleep)、停機(Stop)和待機(Standby)三個模式,相應的功耗如下圖。可見,休眠模式由於程序和絕大部分功能還在工作,所以低功耗效果並不是很明顯。停機模式和待機模式的低功耗效果拔群,故在該兩種中進行取舍,待機模式的待機電流僅2uA,但是僅能被WKUP管腳和RST(復位管腳)喚醒,喚醒后所有東西均需要重新初始化。而停機模式就比較中庸,它的功耗電流是一個范圍,是由所需要保留的功能而決定,可以被中斷和事件喚醒。

由於電路上需要兩路中斷分別對單片機進行喚醒,所以選擇停機(stop)模式,並且調節器是低功耗模式,僅可被中斷,這樣盡量降低需要的耗電資源,將功耗降到最低。

進入停機模式

這里我們直接調用官方的函數庫stm32f0_pwr.c的函數即可。函數包括兩個部分,一部分是開啟芯片電源管理的時鍾,另一部分是就是進入停機模式,停機模式還有兩個選擇模式,一個是調節器電壓,可選常規或低壓,低壓在停機模式下功耗會更低,但是喚醒響應速度會慢一些;令一個喚醒方式的選擇,可選事件喚醒、外部IO口中斷喚醒或者兩者均可。

//開啟芯片電源管理的時鍾
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
//進入停止(stop)模式,選擇低壓調節器(這樣啟動會慢一些,當然功耗會更低),啟用外部中斷喚醒。  
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);

 

退出停機模式

通過事件或外部中斷喚醒后,主程序會繼續運行在“PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);”函數后的指令,此外,芯片的系統時鍾需要重新進行初始化。

其它

為了保證低功耗,在進入停機模式之前,我們還會做一些事情,將外部的功能芯片設置為低功耗模式,將ADC關閉,將一些不使用的IO口設置為模擬輸入(據說這樣功耗最低),待到喚醒之后重新進行功能初始化操作。

現在產品在調整以后,功耗在10uA以下了(因為再小,表不能測了。)


免責聲明!

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



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