11.1.PMU 簡介
PMU即電源管理單元,它有三個電源域,包括VDD/VDDA域、1.1V/1.2V域和備份域。電源管理單元在常規芯片提供了三種省電模式,包括睡眠模式、深度睡眠模式和待機模式;在低功耗芯片中,電源管理單元提供了十種省電模式,包括運行模式,運行模式 1,運行模式 2,睡眠模式,睡眠模式 1,睡眠模式 2,深度睡眠模式,深度睡眠模式 1,深度睡眠模式 2 和待機模式。這些模式能減少電源能耗,且使得應用程序可以在CPU運行時間要求、速度和功耗的相互沖突中獲得最佳折衷。
11.2.PMU 功能
三個電源域:備份域、 VDD/VDDA域和1.1V/1.2V電源域;
三種省電模式(常規芯片):睡眠模式、深度睡眠模式和待機模式;
十種省電模式(低功耗芯片):運行模式、運行模式1、運行模式2、睡眠模式、睡眠模式1、睡眠模式2、深度睡眠模式、深度睡眠模式1、深度睡眠模式2和待機模式。
內部電壓調節器( LDO)提供1.1V/1.2V電源;
提供低電壓檢測器,當電壓低于所設定的閾值時能發出中斷或事件;
當VDD供電關閉時,由VBAT(電池)為備份域供電;
LDO輸出電壓用于節約能耗;
低驅動模式用于在深入睡眠模式下超低功耗。高驅動模式用在高頻模式中。
如下圖PMU及相關電源域內部結構框圖所示。
電池備份域
電池備份域由內部電源切換器來選擇VDD供電或VBAT(電池)供電,然后由VBAK為備份域供電,該備份域包含RTC(實時時鐘)、 LXTAL(低速外部晶體振蕩器)、 BPOR(備份域上電復位)、 BREG(備份寄存器),以及PC13至PC15共3個PAD。為了確保備份域中寄存器的內容及RTC正常工作,當VDD關閉時, VBAT引腳可以連接至電池或其他電源等備份源供電。
VDD/VDDA 電源域
VDD/VDDA 域包括 VDD 域和 VDDA 域兩部分。VDD 域包括 HXTAL(高速外部晶體振蕩器)、LDO(電壓調節器)、 POR/PDR(上電/掉電復位)、 FWDGT(獨立看門狗定時器)和除 PC13、PC14和 PC15 之外的所有 PAD 等等。 VDDA 域包括 ADC/DAC( AD/DA 轉換器)、 IRC8M( 內部 8MRC 振蕩器)、 IRC48M( 內部 48M RC 振蕩器)、 IRC40K(內部 40KHz RC 振蕩器) PLLs(鎖相環)和 LVD(低電壓檢測器)等等。
VDD 域 POR/ PDR(上電/掉電復位) 電路檢測VDD/VDDA并在電壓低于特定閾值時產生電源復位信號復位除備份域之外的整個芯片。 如下圖上電/掉電復位波形圖顯示了供電電壓和電源復位信號之間的關系。 VPOR表示上電復位的閾值電壓, VPDR表示掉電復位的閾值電壓,以GD32F303為例 ,典型值約為2.40V,典型值約為1.8V。遲滯電壓Vhyst值約為600mV。
VDDA 域
LVD 的功能是檢測 VDD/VDDA 供電電壓是否低于低電壓檢測閾值,該閾值由電源控制寄存器(PMU_CTL)中的 LVDT[2:0]位進行配置。 LVD 通過 LVDEN 置位使能,位于電源狀態寄存器(PMU _CS)中的 LVDF 位表示低電壓事件是否出現,該事件連接至 EXTI 的第 16 線,用戶可以通過配置 EXTI 的第 16 線產生相應的中斷。下圖LVD閾值波形圖顯示了 VDD/VDDA 供電電壓和 LVD 輸出信號的關系。( LVD 中斷信號依賴于 EXTI 第 16 線的上升或下降沿配置)。
遲滯電壓 Vhyst 值為 100mV。
省電模式
三種低功耗功耗模式對比表
不同系列 standby 喚醒源
11.3.硬件注意事項
1)對于沒有外部電池的應用,建議將 VBAT 引腳通過 100nF 的外部陶瓷去耦電容連接到 VDD 引 腳上;
2)由于 PC13 至 PC15 引腳是通過電源切換器供電的,電源切換器僅可通過小電流,因此當 PC13 至 PC15 的 GPIO 口在輸出模式時, 其工作的速度不能超過 2MHz(最大負載為 30pF)。
3)如果 VDDA 和 VDD 不同時,VDDA 須高于 VDD,但壓差不超過 0.2V。
VBAT 參考電路
11.4.軟件配置說明
PMU 以低功耗模板配置為例來說明
Demo 一 ( Deepsleep 模式)
demo 功能說明:
MCU 上電啟動后,LED 燈閃爍 5 次,進入深度睡眠模式,通過按鍵來喚醒,LED 燈繼續閃爍 5次又進入深度睡眠。
軟件配置步驟如下:
1)開啟 PMU 時鐘
rcu_periph_clock_enable(RCU_PMU);
2)配置 LED 燈
void led_config(void) { gd_eval_led_init(LED1); gd_eval_led_init(LED2); gd_eval_led_init(LED3); gd_eval_led_init(LED4); }
3)配置喚醒按鍵 PC13
void gd_eval_key_init(void) //配置喚醒按鍵 { rcu_periph_clock_enable(RCU_GPIOC); //配置 GPIOC 的時鐘 rcu_periph_clock_enable(RCU_AF); //開啟復用時鐘 gpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_13);//配置 GPIO PC13 為浮空輸入模式 nvic_irq_enable(EXTI10_15_IRQn, 2U, 0U); //配置中斷向量、搶占優先級、主優先 級 gpio_exti_source_select(GPIO_EVENT_PORT_GPIOC, GPIO_EVENT_PIN_13); //配置外部中斷源 PC13 exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_FALLING); //配置外部中斷 13 線 、下降沿觸發 exti_interrupt_flag_clear(EXTI_13); //清空外部中斷 13 線的中斷標志 }
4)進入低功耗模式函數
pmu_to_deepsleepmode(PMU_LDO_NORMAL,WFI_CMD);
- 按鍵外部觸發中斷服務函數
void EXTI10_15_IRQHandler(void) { if (RESET != exti_interrupt_flag_get(EXTI_13)) //判斷是否為 13 號中斷線 { exti_interrupt_flag_clear(EXTI_13); //清空標志 } }
- 喚醒后重新配置 PLL 系統時鐘
void systemclk_from_deepsleep(void) // deepsleep 喚醒后系統時鐘從內部時鐘切換到 PLL 時鐘 { RCU_CTL |= RCU_CTL_PLLEN; //使能 PLL while(0U == (uint32_t)(RCU_CTL & RCU_CTL_PLLSTB)) //等待 PLL 穩定 { } RCU_CFG0 &= ~RCU_CFG0_SCS; RCU_CFG0 |= RCU_CKSYSSRC_PLL; while(0U == (RCU_CFG0 & RCU_SCSS_PLL)){ //選擇 PLL 為系統時鐘 } }
11.5.PMU 使用注意事項
(1)深度睡眠模式 只要是外部中斷就能喚醒;
(2)從深度睡眠模式喚醒后,PLL 是沒有被使能,喚醒后需要配置 PLL,不然 MCU 系統時鐘就是內部時鐘;
(3)進入 deepsleep 低功耗模式后,將未使用到的 IO 配置成模擬輸入模式,以降低芯片整體功耗。
-
單片機
+關注
關注
6032文章
44514瀏覽量
632946 -
mcu
+關注
關注
146文章
16984瀏覽量
350293 -
嵌入式
+關注
關注
5068文章
19014瀏覽量
303229 -
PMU
+關注
關注
1文章
108瀏覽量
21567 -
GD32
+關注
關注
7文章
403瀏覽量
24218
發布評論請先 登錄
相關推薦
評論