stm32F103R6之低功耗模式

概述

在系統或電源復位以後,微控制器處於運行狀態。當CPU不需繼續運行時,可以利用多種低功耗模式來節省功耗。用戶需要根據最低電源消耗、最快速啟動時間和可用的喚醒源等條件,選定一個最佳的低功耗模式。

STM32F103有三種低功耗模式:

  • 睡眠模式(Cortex™-M3內核停止,所有外設包括Cortex-M3核心的外設,如NVIC、系統時鐘(SysTick)等仍在運行)
  • 停止模式(所有的時鐘都已停止)
  • 待機模式(1.8V電源關閉)

此外,在運行模式下,根據功耗與頻率成正比關係,可以通過以下方式來降低功耗:

  • 降低系統時鐘
  • 關閉APB和AHB總線上未被使用的外設時鐘。


stm32F103R6之低功耗模式

圖 1低功耗模式一覽


睡眠模式

通過執行WFI(wait for interrupt)或WFE(wait for event)指令進入睡眠狀態。根據Cortex™-M3系統控制寄存器中的SLEEPONEXIT位的值,有兩種選項可用於選擇睡眠模式進入機制:

  • SLEEP-NOW:如果SLEEPONEXIT被清除,當WFI或WFE被執行時,微控制器立即進入睡眠模式。
  • SLEEP-ON-EXIT:如果SLEEPONEXIT位被置位,系統從最低優先級的中斷處理程序中退出時(處理完所有中斷後),微控制器就立即進入睡眠模式。

在睡眠模式下,所有的I/O引腳都保持它們在運行模式時的狀態。

如何退出睡眠模式?

1、如果是執行WFI指令進入的睡眠模式,任意一個外設中斷都能將系統從睡眠模式喚醒。

2、如果是執行WFE指令進入的睡眠模式,則一旦發生喚醒事件時,微處理器都將從睡眠模式退出。

停止模式

停止模式是在Cortex™-M3的睡眠模式基礎上結合了外設的時鐘控制機制。

在停止模式下電壓調節器可運行在正常或低功耗模式。此時在1.8V供電區域的的所有時鐘都被停止,PLL、HSI和HSE RC振盪器的功能被禁止,SRAM和寄存器內容被保留下來。

在停止模式下,所有的I/O引腳都保持它們在運行模式時的狀態。

以下條件下執行WFI(等待中斷)或WFE(等待事件)指令可進入停止模式:

  • 設置Cortex-M3系統控制寄存器中的SLEEPDEEP位
  • 清除電源控制寄存器(PWR_CR)中的PDDS位
  • 通過設置PWR_CR中LPDS位選擇電壓調節器的模式

注:為了進入停止模式,所有的外部中斷的請求位(掛起寄存器(EXTI_PR))和RTC的鬧鐘標誌都必須被清除,否則停止模式的進入流程將會被跳過,程序繼續運行。如果在進入停止模式前ADC和DAC沒有被關閉,那麼這些外設仍然消耗電流。通過設置寄存器ADC_CR2的ADON位和寄存器DAC_CR的ENx位為0可關閉這2個外設。

如何退出停止模式?

當一箇中斷(執行WFI命令進入的停止模式)或喚醒事件(執行WFE命令進入的停止模式)導致退出停止模式時,HSI RC振盪器被選為系統時鐘。

當電壓調節器處於低功耗模式下,當系統從停止模式退出時,將會有一段額外的啟動延時。如果在停止模式期間保持內部調節器開啟,則退出啟動時間會縮短,但相應的功耗會增加。

待機模式

待機模式可實現系統的最低功耗。該模式是在Cortex-M3睡眠模式時關閉電壓調節器。整個1.8V供電區域被斷電。PLL、HSI和HSE振盪器也被斷電。SRAM和寄存器內容丟失。只有備份域的寄存器和待機電路維持供電。

在待機模式下,所有的I/O引腳處於高阻態,除了以下的引腳:

  • 復位引腳(始終有效)
  • 當被設置為防侵入或校準輸出時的TAMPER引腳
  • 被使能的喚醒引腳

以下條件下執行WFI(等待中斷)或WFE(等待事件)指令可進入待機模式:

  • 設置Cortex™-M3系統控制寄存器中的SLEEPDEEP位
  • 設置電源控制寄存器(PWR_CR)中的PDDS位
  • 清除電源控制/狀態寄存器(PWR_CSR)中的WUF位

如何退出待機模式?

當一個外部復位(NRST引腳)、IWDG(獨立看門狗)復位、WKUP引腳上的上升沿或RTC鬧鐘事件的上升沿發生時,微控制器從待機模式退出。

從待機喚醒後,除了電源控制/狀態寄存器(PWR_CSR),所有寄存器被複位。 從待機模式喚醒後的代碼執行等同於復位後的執行(採樣啟動模式引腳、讀取復位向量等)。


分享到:


相關文章: