關於STM32的電源管理
一、電源監控器
stm32晶片主要通過引腳VDD從外部獲取電源,在它的內部有電源監控器,用於檢測VDD的電壓,以實現復位功能和緊急掉電處理,來保持系統可靠地執行。
1、上電覆位(POR)與掉電覆位(PDR)
當檢測到VDD的電壓低於閾值VPOR及VPDR時,無需外部電路輔助,STM32晶片會自動保持在復位狀態,防止電壓不住強行工作帶來的不良後果。剛開始VDD電壓低於VPOR(約1.92v)時,STM32處於上電覆位狀態,當電壓持續上升到大於VPOR時,晶片開始正常執行。當檢測到電壓低於VPDR(約1.88v)閾值時,STM32處於掉電覆位狀態。
2、可程式設計電壓檢測器PVD
除了POR和PDR防止誤操作。STM32還提供了可程式設計電壓檢測器PVD,當檢測到VDD的電壓低於程式設計的VPVD閾值時,會向核心產生一個PVD中斷,以使核心在復位前進行緊急處理.該電壓閾值可通過電源控制暫存器PWR_CSRd置。
3、電源系統
電源系統的主要分為備份域電路、核心電路和ADC電路3部分。
①備份域電路
STM32的LSE震盪器、RTC和備份暫存器被包含在備份域電路中。通過VBAT引腳獲取供電電源。
②核心電路(也叫調壓器供電電路,即1.8V區域)
為備份域和待機電路以外的所有數位電路供電。包括核心數字外設和RAM。調壓器可以執行在執行模式、停止模式和待機模式。
③ADC電路
為了提高ADC的轉換精度,STM32為ADC配了獨立的電源介面,方便進行單獨的濾波。
二、STM32的功耗模式
按功耗由高到低排序,STM32有執行、睡眠、停止、待機4種工作模式。上電覆位後STM32處於執行狀態,當核心不需要執行時可選擇後面三種低功耗模式,以降低功率。這三種模式中,電源消耗不同,喚醒時間不同,喚醒源不同。
1.睡眠模式
僅關閉了核心,片上外設及M3外設都在執行。有兩種方式進入睡眠模式,WFI和WFE,他的進入方式決定了喚醒方式。由WFI進入的由中斷喚醒,執行完中斷函式後繼續從WFI後面執行。由WFE進入的則由事件喚醒。喚醒後直接執行WFE後的程式。
LED_Init();
Key_GPIO_Init();
LED(0);
__WFI();//進入睡眠模式
//等待KEY1按下產生中斷喚醒
//喚醒後接著向下執行
LED(3);
delayms(1000);
LED(4);
delayms(1000);
LED(5);
2.停止模式
在停止模式中進一步關閉了其他時鐘,故在停止模式下所有的外設也停止工作。但由於1.8V區域電源沒關閉,暫存器和記憶體的資訊還在所以停止模式結束後還是可以接著進入停止模式的地方接著向下執行程式碼。
LED_Init();
Key_GPIO_Init();
LED(0);
//進入停止模式
PWR_EnterSleepMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
//被喚醒後接著向下執行
//從停止模式被喚醒後使用的是HSI時鐘,這裡重啟HSE時鐘,使用PLLCLK
SYSCLK_Config_STOP();
LED(1);
delayms(500);
LED(2);
delayms(500);
LED(3);
3.待機模式
待機模式關閉了所有的時鐘,故待機結束後只能重新開始執行程式。注意要進入待機模式前必須使能PWR時鐘。
int main()
{
//使能電源管理的時鐘,必須要使能時鐘才能進入待機模式
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
while(1)
{
LED_Init();
Key_GPIO_Init();
LED(0);
LED(1);
delayms(500);
LED(2);
delayms(500);
LED(3);
delayms(500);
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0)
{
LED(8);
delayms(500);
PWR_ClearFlag(PWR_FLAG_WU);
PWR_WakeUpPinCmd(PWR_WakeUpPin_1,ENABLE);
/*進入待機模式*/
PWR_EnterSTANDBYMode();
}
}
}
}