一.待機模式.待機模式是低功耗中最低功耗的,內部電壓調節電路被關閉, HSE、HIS、PLL被關閉;進入待機模式后,SRAM和寄存器的內容將丟失。 (CPU停止,外設停止,RAM的數據寄存器的內容丟失)
1.特點:SRAM和寄存器的內容會丟失。外設不供電,只有CPU的備用電源在運行
2.喚醒條件:NRTS的外部復位信號,IWDG復位、WKUP引腳上的一個上升邊沿或者RTC鬧鍾。喚醒后相當於軟重啟使系統復位。
3.使用步驟:
3.1 #include <stm32f10x_pwr.h>
void Standby_Config(void)
{
// 使能PWR時鍾與BKP時鍾
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
//使能后備寄存器訪問
PWR_BackupAccessCmd(ENABLE);
// 使能WKUP引腳
PWR_WakeUpPinCmd(ENABLE);
// 檢測Standby標志位
if(PWR_GetFlagStatus(PWR_FLAG_SB) != RESET)
{
printf("\r\n從待機模式退出\r\n");
//清除Standby標志位
PWR_ClearFlag(PWR_FLAG_SB);
}
else
{
printf("\r\n從運行模式復位\r\n");
}
}
3.2 進入睡眠模塊。PWR_EnterSTANDBYMode();//使能待機模式
3.3 滿足喚醒條件,進入軟重啟!
二 睡眠模式:相當於中場休息。退出睡眠后還得做好恢復退出時的狀態(初始化系統時鍾即可)
2.1特點:只有CPU停止工作,所有外設處於工作狀態,SRAM和寄存器的內容保持不變。
2.2.喚醒條件:所以的外部中斷,包括RTC中斷.喚醒后需要初始化系統時鍾。
2.3使用步驟:
2.3.1 在干完必須得工作后,通過 __WFI();//進入睡眠模式,后面的代碼不執行
2.3.2 喚醒條件發生,比如外中斷發生,在中斷服務程中通過調用Stop_SysClkConfing()函數退出睡眠模塊,執行__WFI()后面的功能。Stop_SysClkConfing()實際上就是重新初始化系統時鍾即調用SystemInit()。
三 停止模式:相當於深度睡眠,放長假,比“”中場休息(睡眠模塊)“”的時間長
3.1特點:停止內部1.8V供電,HSE、HIS、PLL時鍾被關閉CPU時鍾停止,外設全部不工作;只有CPU內存工作,數據不丟失。
3.2喚醒條件:任意的外部中斷,RTC鬧鍾,PVD輸出,USB喚醒條件。
3.3時鍾步驟:與睡眠模式的操作基本相同,唯一區別就是進入睡眠時調用的函數不一樣,停止模式調用的是以下函數
PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
四 RTC定時中斷:
STM32L152 RTC 日歷和定時中斷使用 https://blog.csdn.net/jnu_fangzebin/article/details/51543506