電源域與運行級別概述
電源域(Power Domain)
核心域(Core Domain):包括 CPU 核心和關鍵架構模塊(如 NVIC、CPU 內核寄存器)。
外設域(Peripheral Domain):各類外設時鐘和寄存器。
SRAM/Flash 域:程序存儲與數據存儲,部分模式下可保留或斷電。
供應電壓調節器(Regulator):主 LDO 或 BUCK,用于內核和外設不同電壓需求。
運行級別(Run Level)
Run:所有時鐘開啟,最高性能,最高功耗。
Low?Power Run(部分系列支持):降低核心電壓或限制最大時鐘以節省功耗。
Sleep:關閉 CPU 時鐘,僅保留總線與外設時鐘。
Stop:關閉主振蕩器和部分總線時鐘,保留低速時鐘或 LSE/LSE,核心停止,SRAM 保持。
Standby:關閉大部分電源域,僅保留極少喚醒源,SRAM 和寄存器一般不保留。
Shutdown(部分高端系列):幾乎全域斷電,僅保留最少喚醒邏輯。
電源控制(PWR)簡介


① VDDA 供電區域(ADC/模擬供電)
特點:
VDDA/VSSA 是模擬電源/地,為 ADC、DAC、比較器等模擬模塊供電。
VREF+ 為 ADC 提供參考電壓(通常連接 VDDA 或外部高精度參考)。
必須和 VDD 同時供電,否則 ADC/DAC 模塊可能無法正常工作。
② VDD / 1.8V 數字供電區域(調節器核心)
構成與功能:
VDD/VSS:主供電,給 GPIO、外設 I/O、內部調節器供電。
調節器 LDO / SMPS 輸出約 1.8V,供內核、RAM、數字外設。
STM32 內部大多數電路工作在 1.8V 電壓域,外部用 VDD(通常是 3.3V)做接口。
調節器模式:
模式 | 功能說明 | 場景 |
---|---|---|
主模式(Run) | 提供穩定的 1.8V 輸出 | MCU 正常運行時 |
低功耗模式(Stop) | 降低調節器驅動能力、減小電流 | MCU 睡眠/停止模式 |
關閉(Standby) | 停止供電,僅備份域保留 | MCU 進入待機模式,最省電狀態 |
③ VBAT 后備域(RTC 備份供電)
功能:
在 主電源(VDD)掉電時,VBAT 為 RTC、備份寄存器、LSE 晶振等繼續供電。
支持連接電池或超級電容,維持系統時間與部分狀態數據不丟失。
使用建議:
RTC 需搭配 LSE 低速晶振 或 LSI 低速 RC。
VBAT 區域可存儲:
RTC 時間
RTC 鬧鐘
BKP 寄存器(備份寄存器)
部分支持 TAMP(篡改檢測器)
不需要 RTC 的應用,可將 VBAT 直接接 VDD,也可懸空(節省硬件資源)。
縮寫 | 全稱 | 功能說明 |
---|---|---|
POR | Power-On Reset | 當 上電時 VDD 未達到安全電壓閾值(VPOR),芯片保持復位 |
PDR | Power-Down Reset | 當 運行中 VDD 掉到低于閾值(VPDR),芯片會重新復位 |

可由軟件配置一個閾值(2.0V~3.6V),當 VDD 低于該閾值時觸發中斷或事件。
屬于預警機制,不會自動復位 MCU,而是交由軟件做處理。
在電壓下降趨勢時,提前保存數據、停止敏感外設。
搭配 Flash 寫保護,防止寫入不穩定區域。
可與低功耗模式配合,當 VDD 恢復后喚醒。
內部會將 VDD 與通過 PWR_CR
中 PLS[2:0]
選擇的一個可編程電壓閾值進行比較。
比較結果會反饋到 PWR_CSR
中的 PVDO
標志位:
PVDO=1
:表示 VDD < VPVD(電壓太低)
PVDO=0
:表示 VDD ≥ VPVD
如果你啟用了 EXTI16中斷線 并配置為上升/下降沿觸發,就能在電壓跨越閾值時產生中斷。
HAL_PWR_EnablePVD(); // 啟用PVD
//設置閾值和中斷模式
PWR_PVDTypeDef sConfigPVD;
sConfigPVD.PVDLevel = PWR_PVDLEVEL_4; // 閾值約為2.5V(不同MCU有差異)
sConfigPVD.Mode = PWR_PVD_MODE_IT_RISING_FALLING;
HAL_PWR_ConfigPVD(&sConfigPVD);
//啟用中斷:
HAL_NVIC_SetPriority(PVD_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(PVD_IRQn);
//編寫中斷回調函數:
void HAL_PWR_PVDCallback(void)
{// 電壓低了!趕緊保存數據或關外設
}

模式 | 功耗 | 保留內容 | 喚醒時間 | 喚醒源 |
---|---|---|---|---|
運行模式 | 高 | 全部 | 無需 | 不需要 |
睡眠模式 | 較低 | 所有 SRAM 和外設 | 快速 | 所有中斷(外設中斷) |
停止模式 | 更低 | SRAM、寄存器 | 較慢 | RTC、外部中斷、喚醒引腳 |
待機模式 | 極低(uA) | 只保留后備域/RTC | 最慢 | 喚醒引腳、RTC 喚醒、中斷(有限) |
1. 運行模式(Run Mode)
正常工作狀態,CPU、外設、時鐘等全開。
功耗最大,但響應速度最快。
上電復位后默認進入此模式。
2. 睡眠模式(Sleep Mode)
特點:CPU 停止工作,外設繼續運行。
功耗優化點:
時鐘系統基本保持不變。
所有外設繼續運行(如 UART、ADC 等)。
SRAM 和寄存器內容全部保留。
進入方式(兩種):
模式 | 條件 | 行為 |
---|---|---|
立即睡眠 | SLEEPDEEP = 0 + 執行 WFI /WFE | 立即睡眠,等待中斷/事件喚醒 |
退出時睡眠 | SLEEPONEXIT = 1 + 中斷服務中執行 WFI | 中斷返回立即睡眠 |
SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; // 確保不是 deep sleep
__WFI(); // 執行睡眠
3. 停止模式(Stop Mode)
特點:內核和大部分外設停止,只保留 SRAM、寄存器和 RTC。
功耗優化點:
所有主頻時鐘停止(HSE/HSI/LSE/LSI)。
電壓調節器切換為低功耗模式。
SRAM 數據仍保留。
喚醒時間比睡眠略慢,但功耗顯著降低。
喚醒源:
EXTI 外部中斷(如 GPIO)、RTC、USART(帶喚醒功能)
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk
:啟用深度睡眠。
PWR->CR
:
PDDS = 0
:進入停止模式(不是待機)
LPDS = 1
:低功耗調壓器模式
CWUF = 1
:清除 Wakeup Flag
PWR->CR &= ~PWR_CR_PDDS; // 設置為停止模式
PWR->CR |= PWR_CR_CWUF; // 清除 Wakeup 標志
PWR->CR |= PWR_CR_LPDS; // 可選:啟用低功耗調壓器
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
__WFI(); // 或 __WFE();
4. 待機模式(Standby Mode)
特點:最低功耗,只保留后備域與 RTC,幾乎斷電狀態。
功耗優化點:
SRAM/寄存器內容全部丟失。
喚醒后會重新復位(類似上電啟動)。
通常由 VBAT 保持 RTC 運行。
喚醒源:
喚醒引腳(WKUP)、RTC 鬧鐘、外部中斷。
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk
PWR->CR |= PWR_CR_PDDS
PWR->CR |= PWR_CR_CWUF
PWR->CR |= PWR_CR_CWUF; // 清除 Wakeup 標志
PWR->CR |= PWR_CR_PDDS; // 設置進入待機模式
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
__WFI(); // 或 __WFE();