問題描述
stm32f0308正常是運作在Run mode下,這種mode是在reset之後的預設模式。Low Power Mode,即低功耗模式,用于在IC空閑時可以考慮選擇進入,使系統耗能降低,在必要的時候通過喚醒在進入Run mode正常工作。Low Power Mode,在嵌入式系統中考慮的很多,也很關鍵,因為一般都是用移動電源供電,合理使用Low Power Mode,會很好的提高裝置的續航能力。
Low Power Mode方式
- Sleep Mode:CPU時鐘關閉,所有peripheral時鐘運作;
- Stop Mode:所有時鐘均停止;
-
Standby Mode:1.8 V domain power-off,這裡domain power-off應當是相當于關閉了給IC供電的電源。
另外,如果在Run Mode下,也可以通過如下手段來降低功耗:
- 降低System Clock的速度,即通過Clock的配置,利用分頻的作用,将系統Clock從最高的48MHz降低,這部分的配置可以參考Clock相關文檔或文章;
-
當不使用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的比較如下:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SM3IzNykjNjFjN0UTZ0kTMzYzX2EzNwATM4AzLclDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
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進入退出場景比較
Stop Mode
比Sleep Mode更進一步,IC内部Clock應當都停止了,SRAM和register,IO口狀态是保持在上一刻進入Stop Mode時的狀态。
Stop Mode進出場景比較
Standby Mode
比Stop Mode更省電,SRAM和register隻有部分維持資料(需看下register表,應當有标明為Standby Circuitry的)。
Standby Mode進出場景比較
在上面的Stop Mode和Standby Mode中, 貌似IWDG,RTC,LSI和LSE還是由這幾個peripheral各自的register程式設計設定而受控制的,因為即使是進入了Low Power Mode,RTC的功能還是需要的,因為要計時,這很重要。