該芯片具有5中低功耗模式:
① 低功耗運行模式:低功耗運行模式:適配器處于低電壓模式,時鐘頻率限制在低頻,部分外圍的使用也受限。
② 睡眠模式:Cortex-M3內(nèi)核停止,外圍器件保持運行狀態(tài),比如RTC一直運行。
③ 低功耗睡眠模式:Cortex-M3內(nèi)核停止,時鐘頻率受限(降頻),部分外圍運行,電源適配器處于低功耗模式,RAM斷電,F(xiàn)lash停止。
④ 停止模式:所有的時鐘停止,電源低功耗運行。
⑤ 待機模式:內(nèi)核斷電。
另外:在正常運行模式下,功耗也可以通過下面的方式降低:
降低時鐘頻率。
外圍不使用的時候,APBx和AHBx外圍的時鐘降低。
其實這個貌似用途反而不大,可以考慮不降頻,縮短整個程序運行時間,然后快速進入低功耗模式。
低功耗模式下的時鐘特征
APB外設(shè)和DMA時鐘是可以通過軟件關(guān)閉的。
一、睡眠和低功耗睡眠模式下的時鐘表現(xiàn)
睡眠和低功耗睡眠模式下,CPU內(nèi)核時鐘停止。 睡眠模式下,內(nèi)存接口時鐘和其他所有外圍的時鐘可以通過軟件設(shè)定停止。低功耗 睡眠模式下,內(nèi)存接口時鐘停止,而且RAM處于掉電模式,AHB-APB總線時鐘被 硬件停止(前提是連接的外圍器件也停止)
二、停止和待機模式下的時鐘特點
系統(tǒng)時鐘和所有的告訴時鐘停止:
PLL停止。
HIS時鐘源停止。
HSE時鐘源停止。
MSI時鐘源也停止。
當stop模式被中斷打斷跳出時,或者待機模式被reset打斷跳出時,MSI時鐘會被自動選擇作為系統(tǒng)時鐘。當設(shè)備從stop模式跳出后,之前的MSI配置信息保持,當設(shè)備從待機模式跳出時,定時值會被復(fù)位為默認的2MHz。
三、外圍時鐘選通。
在RUN模式下,HCLK和PCLKx對應(yīng)的獨立外圍設(shè)備和內(nèi)存設(shè)備可以在任何時間設(shè)定停止,以便降低 功耗。
在sleep模式下,通過執(zhí)行WFI或者WFE指令設(shè)定外圍時鐘停止,可以進一步降低功耗。
外圍時鐘的選通控制是通過AHB時鐘使能寄存器(RCC_AHBENR)、APB2時鐘使能 寄存器(RCC_APB2ENR)、APB1時鐘使能寄存器(RCC_APB1ENR)
睡眠模式下,通過reset寄存器RCC_AHBLPENR和RCC_APBxLPENR的同步位,實現(xiàn)自動關(guān)閉外圍時鐘的功能。
四、睡眠模式
(1) 如何進入睡眠模式
進入睡眠模式,需要執(zhí)行WFI(wait for interrupt)或WFE(wait for event)指令。這兩種指令都是對SLEEPONEXIT位進行配置實現(xiàn)的。
sleep- now:一旦執(zhí)行了WFI或WFE,(立刻睡眠)如果SLEEPONEXIT位被清除,MCU進入sleep模式。
sleep-on-exit:如果SLEEPONEXIT位置1,如果退出ISR,MCU進入sleep模式。
在睡眠模式下,所有的I/O口,都保持與RUN模式相同的狀態(tài)。
(2)如何退出睡眠模式
如果通過WFI指令進入睡眠 模式,任何的外圍設(shè)備的中斷都能實現(xiàn)喚醒設(shè)備。
如果通過WFE執(zhí)行進入睡眠模式,MCU通過“事件”出現(xiàn)喚醒,這個喚醒的時間包括:
① 使能一個外圍控制中斷,但是不在NVIC中, 使能SEVONPEND位,外圍中斷掛起位 和 外圍NVIC IRQ通道掛起位清除。
② 配置一個外部或者內(nèi)部的EXTI Line作為事件模式,當CPU從WFE喚醒,不必要清除外圍中斷位,或者NVIC IRQ通道掛起位。
睡眠模式進入/退出總結(jié):
五、低功耗睡眠模式
(1)如何進入 低功耗睡眠模式
進入低功耗睡眠模式,需要配置電壓適配器到低功耗模式,同時配合執(zhí)行WFI或WFE指令。在這種模式下,F(xiàn)lash存儲無效,但是RAM存儲 有效。
在這種模式下,系統(tǒng)頻率不能超過 f_MSI range1,
低功耗睡眠模式只有在Vcore是在電壓范圍2(range2 = 1.5V)才能進入。
注意:如果APB1時鐘頻率小于 7倍RTC時鐘頻率(7*RTCLCK = 7*32.768k = 229376),那么讀RTC日歷寄存器就需要讀2次,如果第2次讀取的RTC_TR數(shù)值與第一次相同,才能確定讀取數(shù)據(jù)正確, 否則就再讀一次。
有兩種方式可以進入低功耗睡眠模式:
① 立刻睡眠:如果SLEEPONEXIT位清0,一旦執(zhí)行WFI或WFE執(zhí)行,MCU立刻進入低功耗睡眠模式。
② 通過事件睡眠:如果SLEEPONEXIT位置1,只有事件的優(yōu)先級最低,MCU才進入低功耗模式。
進入 低功耗睡眠模式下的過程如下:
① 通過FLASH_ACR寄存器的SLEEP_PD位,關(guān)閉Flash,這可以降低功耗,不過也會增加喚醒時間。
② IP Clock必須通過RCC_APBxENR和RCC_AHBENR寄存器使能或禁止。
③ 系統(tǒng)時鐘頻率必須降低。
④ 通過軟件(LPSDSR bit位設(shè)定)強制電壓適配器處于低功耗模式。
⑤ 執(zhí)行WFI/WFE執(zhí)行,進入睡眠模式。
退出低功耗睡眠模式:與 睡眠模式類似。
六、停止模式
停止模式是一種深度睡眠模式,配合外圍時鐘選通。電壓適配器可以配置為正?;虻凸哪J健?
停止模式下,Vcore時鐘是停止的,PLL、MSI、HSI、HSE RC是停止的(RTC的時鐘沒有停止),,內(nèi)部的SRAM和寄存器目錄是保持的。
為了在Stop模式下得到最低的功耗,內(nèi)部Flash也要進入低功耗模式,當Flash在power down模式,當從stop模式下喚醒后,會有啟動延時。
為了實現(xiàn)功耗最小化,進入stop模式前,Vrefint、BOR、PVD、溫度傳感器可以關(guān)閉,這些外圍也是可以再打開的,當從stop模式退出后,通過PWR_CR寄存器中ULP bit位。
進入STOP模式:
STOP模式下,下面的外圍是可以獨立編程的:
IWDG、RTC、LSI RC振蕩器、外部32.768k振蕩器。
STOP 模式退出:
從stop模式下退出可以通過中斷或者wakeup事件,退出后,MSI RC振蕩器會被選做系統(tǒng)時鐘。