天天看點

[CortexM0--stm32f0308]Low Power Mode

問題描述

stm32f0308正常是運作在Run mode下,這種mode是在reset之後的預設模式。Low Power Mode,即低功耗模式,用于在IC空閑時可以考慮選擇進入,使系統耗能降低,在必要的時候通過喚醒在進入Run mode正常工作。Low Power Mode,在嵌入式系統中考慮的很多,也很關鍵,因為一般都是用移動電源供電,合理使用Low Power Mode,會很好的提高裝置的續航能力。

Low Power Mode方式

  1. Sleep Mode:CPU時鐘關閉,所有peripheral時鐘運作;
  2. Stop Mode:所有時鐘均停止;
  3. Standby Mode:1.8 V domain power-off,這裡domain power-off應當是相當于關閉了給IC供電的電源。

    另外,如果在Run Mode下,也可以通過如下手段來降低功耗:

  4. 降低System Clock的速度,即通過Clock的配置,利用分頻的作用,将系統Clock從最高的48MHz降低,這部分的配置可以參考Clock相關文檔或文章;
  5. 當不使用APB或AHB peripheral時,使用門控時鐘的方式。在peripheral配置使用時,一般會先通過RCC_AH/PBClockCmd(xx,Enable)之類的接口來使能peripheral時鐘,有時候,可能這個peripheral并沒有再使用了,那可以通過RCC_AH/PBClockCmd(xx,Disable)的接口将其關閉,也可以省些電。這裡的RCC_AH/PBClockCmd()是stm32的固件庫中提供的,需要了解細節的可以看下stm32固件庫,其中主要是通過對RCC_APBENR和RCC_AHBENR register操作來使能/禁止某項peripheral的時鐘的。

    幾種Low Power Mode的比較如下:

  6. [CortexM0--stm32f0308]Low Power Mode

Sleep Mode

如何進入Sleep Mode?

執行WFI (Wait For Interrupt) 指令或WFE (Wait for Event)指令。進入Sleep Mode的機制可以通過Cortex-M0 System Control register的SLEEPONEXIT bit來選擇:

6. Sleep-now:SLEEPONEXIT bit置零,在WFI/WFE指令執行之後立即進Sleep Mode;

7. Sleep-on-exit:SLEEPONEXIT bit置1,在MCU退出了最低優先級的ISR之後,即系統沒有任何ISR在處理時,就會進入Sleep Mode。

如何退出Sleep Mode?

退出Sleep Mode的方式和使用的進入Sleep Mode的指令WFI和WFE有關,使用WFI進入Sleep Mode,任何中斷的發生都會導緻退出Sleep Mode,而WFE指令進入的Sleep Mode,在event發生時會退出Sleep Mode,對于WFE指令進入Sleep Mode的方式,需要使用如下兩種方式配置其退出Sleep Mode:

8. 使能一個peripheral中斷(非NVIC中斷),使能Cortex-M0 System Control register的SEVONPEND bit,當MCU從WFE Sleep Mode醒來時,需要清掉peripheral interrupt pending bit和peripheral NVIC IRQ channel pending bit ;

9. 配置一個外部或内部EXTI line為event模式。

Sleep Mode進入退出場景比較

[CortexM0--stm32f0308]Low Power Mode
[CortexM0--stm32f0308]Low Power Mode

Stop Mode

比Sleep Mode更進一步,IC内部Clock應當都停止了,SRAM和register,IO口狀态是保持在上一刻進入Stop Mode時的狀态。

Stop Mode進出場景比較

[CortexM0--stm32f0308]Low Power Mode

Standby Mode

比Stop Mode更省電,SRAM和register隻有部分維持資料(需看下register表,應當有标明為Standby Circuitry的)。

Standby Mode進出場景比較

[CortexM0--stm32f0308]Low Power Mode

在上面的Stop Mode和Standby Mode中, 貌似IWDG,RTC,LSI和LSE還是由這幾個peripheral各自的register程式設計設定而受控制的,因為即使是進入了Low Power Mode,RTC的功能還是需要的,因為要計時,這很重要。

Low Power Mode下的debug問題

Low Power Mode的RTC喚醒方式