淺談stm32的低功耗模式

来源:https://www.cnblogs.com/lxyjrx/archive/2022/05/05/16223115.html
-Advertisement-
Play Games

stm32標準庫實現低功耗 一、概述 stm32不同系列晶元支持的低功耗模式各有差異,本文以F103系列晶元為例,簡單講解不同低功耗模式的特點和使用方法。 二、低功耗 簡述 預設情況下,系統或電源複位後,微控制器處於Run模式。當CPU不需要保持運行時(例如等待外部事件時),可以使用幾種低功耗模式來 ...


stm32標準庫實現低功耗

一、概述

stm32不同系列晶元支持的低功耗模式各有差異,本文以F103系列晶元為例,簡單講解不同低功耗模式的特點和使用方法。

二、低功耗

簡述

預設情況下,系統或電源複位後,微控制器處於Run模式。當CPU不需要保持運行時(例如等待外部事件時),可以使用幾種低功耗模式來節省電源。這取決於用戶選擇的模式,以提供低功耗、較短啟動時間和可用的喚醒源之間的最佳折衷。

stm32f10xxx 設備有三種低功耗模式:

  • 睡眠模式
    這種模式會關閉cpu時鐘,但是所有外設包括M3內核的外設(NVIC、SysTick等等)都不會受到影響,保持運行
  • 停止模式
    所有時鐘都會關閉
  • 待機模式
    1.8供電區域斷電

另外,mcu在運行模式(run)下也可以通過以下方式降低功耗:

  • 降低系統時鐘頻率
  • 關閉一些不使用的外設的時鐘

上面這三種低功耗模式的具體描述可以看下麵這個圖,覺得閱讀英文不方便的話請自行翻譯,我覺得這更有助於你去理解這幾個模式的特點。
低功耗模式詳細描述

下麵這張表更好的彙總了各種低功耗模式的特點:
123

詳細介紹

下麵會簡單介紹各種降低功耗的方法,包括run、sleep、stop、standby。

run模式下

1、Slowing down system clocks(run模式下降低功耗)

run模式下,我們可以通過對預分頻器編程來降低系統時鐘(SYSCLK, HCLK, PCLK1, PCLK2);
在進入sleep模式之前,我們也可以對預分頻器編程來降低外設時鐘。

詳細請查閱RCC_CFGR寄存器,這裡不展開描述。

2、 Peripheral clock gating(外圍時鐘門控)

在Run模式下,每個外設和存儲器的HCLK和PCLKx可以隨時停止,以降低功耗。
在sleep模式下,在執行WFI或者WFE內核指令之前我們可以關閉一些不需要使用的外設時鐘來進一步降低功耗。

低功耗模式下(分為sleep、stop、standby)

1、sleep mode

進入sleep模式

通過執行WFI (Wait For Interrupt)或WFE (Wait For Event)指令進入Sleep模式。根據Cortex®-M3系統控制寄存器中的SLEEPONEXIT位,有兩種選項可用於選擇Sleep模式進入機制:

  • Sleep-now:如果清除SLEEPONEXIT位,則在執行WFI或WFE指令時,MCU馬上進入Sleep模式。

  • Sleep-on-exit:如果設置了SLEEPONEXIT位,則MCU在退出最低優先順序ISR時進入Sleep模式。

    在休眠模式下,所有I/O引腳保持與運行模式相同的狀態。

退出sleep模式

如果使用WFI指令進入睡眠模式,任何被NVIC確認的外設中斷都可以從睡眠模式喚醒設備。

如果使用WFE指令進入Sleep模式,則在事件發生時,MCU將立即退出Sleep模式。喚醒事件可以通過以下任意一種方式產生:

  • 在外設控制寄存器中啟用中斷,但在NVIC中不啟用,併在Cortex®-M3系統控制寄存器中啟用SEVONPEND位。當MCU從WFE恢復時,必須清除外設中斷懸掛位(pending)和外設NVIC IRQ通道懸掛位(pending)(在NVIC中斷清除懸掛寄存器中)。

  • 在事件模式下配置外部或內部EXTI line。當CPU從WFE恢復時,由於事件行對應的掛起位沒有設置,不需要清除外設中斷掛起位或NVIC IRQ通道掛起位。

所有進入和退出休眠的細節彙總成以下表格:
111

2、stop mode

簡述

停止模式是基於Cortex®-M3深度睡眠模式結合外圍時鐘門控。電壓調節器可以配置在普通模式或低功率模式。

在停止模式下,1.8 V域中的所有時鐘都停止,鎖相環、HSI和HSE RC振蕩器都被禁用。SRAM和寄存器的內容被保留。

在停止模式下,所有I/O引腳保持與運行模式相同的狀態。

進入停止模式
  • 為了進一步減少功耗,可以設置電壓調節器工作在低功耗模式,這需要配置PWR_CR的LPDS位。
  • 如果快閃記憶體編程正在進行,停止模式的進入將被延遲,直到記憶體訪問完成。
  • 如果對APB域的訪問正在進行,停止模式的進入將延遲到對APB的訪問完成。

在停止模式下,可以通過編程單個控制位來選擇以下特性:

  • Independent watchdog (IWDG)
  • Real-time clock (RTC)
  • Internal RC oscillator (LSI RC)
  • External 32.768 kHz oscillator (LSE OSC)

此外,ADC或DAC在停止模式下也會消耗電能,除非他們在進入停止模式之前被禁用。
要禁用它們,ADC_CR2寄存器中的ADON位和DAC_CR寄存器中的ENx位必須都寫為0。

退出停止模式

當通過發出中斷或喚醒事件退出Stop模式時,HSI RC振蕩器被選為系統時鐘。

當電壓調節器在低功率模式下運行時,當從停止模式喚醒時,會產生額外的啟動延遲。通過在停止模式期間保持內部調節器(這裡是指電壓調節器)處於ON狀態,雖然減少了啟動時間,但消耗更高。

下圖彙總了停止模式進入和退出的細節信息。
停止模式細節

註意:

  1. 在進入停止模式之前,要清除所有中斷掛起位,如上圖所述。
  2. 喚醒之後記得要重新配置系統時鐘。

3、Standby mode

簡述

“待機”模式可以實現最低的功耗。它基於Cortex®-M3深度睡眠模式,禁用電壓調節器。導致1.8 V域下電。鎖相環、HSI振蕩器和HSE振蕩器也處於關閉狀態。除了備份域和備用電路中的寄存器外,SRAM和寄存器的內容都會丟失。

進入待機模式

在待機模式下,可以通過編程單個控制位來選擇以下特性:

  • Independent watchdog (IWDG)
  • Real-time clock (RTC)
  • Internal RC oscillator (LSI RC)
  • External 32.768 kHz oscillator (LSE OSC)
退出待機模式

當外部複位(NRST引腳)、IWDG複位、WKUP引腳上升沿或RTC告警上升沿發生時,微控制器退出待機模式。
除電源控制/狀態寄存器(PWR_CSR)外,所有寄存器都在Standby喚醒後重置。

從待機模式喚醒後,程式跟複位後一樣重新啟動。電源控制/狀態寄存器(PWR_CSR)中的SBF狀態標誌表示MCU處於待機模式。所以程式重新運行後我們可以讀取這個狀態標誌SBF來判斷是否從待機模式喚醒。

下圖彙總了待機模式進入和退出的細節信息。
待機模式

註意:
在待機模式下,所有I/O引腳都是高阻態的,除了:

  • 複位引腳(仍可用)
  • 干預引腳,如果配置為干預或校準輸出
  • WKUP引腳,如果使能了

調試模式

預設情況下,如果應用程式在調試功能使用時將MCU置於停止或待機模式,調試連接將丟失。這是因為Cortex®-M3內核停止工作了。

但是,通過在DBGMCU_CR寄存器中設置一些配置位,即使正在使用低功耗模式,也可以對軟體進行調試。

核心不允許在調試會話期間關閉FCLK或HCLK。因為這些是調試器連接所需的,所以在調試期間,它們必須保持活動狀態。單片機集成了特殊的方法,允許用戶在低功耗模式下調試軟體。為此,調試器主機必須首先設置一些調試配置寄存器來改變低功耗模式的行為:

  • 在Sleep模式下,DBGMCU_CR寄存器的DBG_SLEEP位必須事先由調試器設置。這將提供給HCLK與提供給FCLK相同的時鐘(系統時鐘以前由軟體配置)。

  • 在停止模式下,DBG_STOP位必須由調試器預先設置。這將
    使內部RC振蕩器時鐘在停止模式下供給FCLK和HCLK。

這裡不開展描述,有興趣請參考相關用戶手冊。

從低功耗模式自動喚醒(AWU)

RTC可以用來從低功耗模式喚醒MCU,而不依賴外部中斷(自動喚醒模式)。
RTC提供了一個可編程的時間基準,從停止或待機模式在定期間隔喚醒。
為此,可以通過對備份域控制寄存器(RCC_BDCR)中的RTCSEL[1:0]位進行編程來選擇三個RTC時鐘源中的兩個,如下圖:
1234

  • 32.768 kHz外部晶體振蕩器(LSE OSC)。該時鐘源提供了精確的時間基準,功耗極低(典型情況下增加不超過1µa)。

  • RC內部振蕩器(LSI RC)。該時鐘源具有節省32.768 kHz晶體成本的優點。這種內部RC振蕩器的設計是為了增加最小的功耗。

要使用RTC鬧鐘事件從Stop模式喚醒,需要:
1、將EXTI Line 17設置為對上升沿敏感
2、配置RTC產生RTC鬧鐘
從Standby模式中喚醒,不需要配置EXTI Line 17。

下麵彙總一些各個低功耗模式的特點和使用方法:
1234
23456

總結

本文簡單介紹了STM32F1系列低功耗模式的特點和使用方法,使本人加深了對這些低功耗模式涉及的對象的理解,便於後續的低功耗設計和應用。
好記性不如爛筆頭。

參考資料

參考手冊
datasheet
編程手冊


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • C++實例1--通訊錄管理系統 1 #include<iostream> 2 #include<string> 3 4 using namespace std; 5 6 #define MAX 1000 // 最大人數 7 8 // 通訊錄管理系統 9 10 // 主菜單 11 void showM ...
  • 大家好,我是DD,今天繼續來學點Java的新特性! 假設有這樣一個場景,我們需要做一個工具。用來自動生成項目文檔,文檔可以通過瀏覽器查看,所以最後產出物肯定是一堆html文件。為了讓這些html文件更容易讀,良好的格式肯定要保持,該換行的換行、該縮進的縮進。 那麼,在組織最後內容的時候,你可能就會這 ...
  • 為組件設置邊框 很多情況下,我們常常喜歡給不同的組件設置邊框,從而讓界面的層次感更明顯,swing中提供了Border對象來代表一個邊框,下圖是Border的繼承體系圖: ​ 特殊的Border: TitledBorder:它的作用並不是直接為其他組件添加邊框,而是為其他邊框設置標題,創建該類的對象 ...
  • iNeuOS本次更新主要完善數據點、設備和計算平臺的計算預警,三個地方的計算預警作用的數據範圍不一樣,數據點只對單獨數據點、設備是對當前設備範圍的數據點、計算平臺是對當前平臺的所有數據點。 ...
  • 本節介紹有關伺服器管理和維護過程中的一些註意事項,都是筆者的經驗之談,相信對新手會有一定的啟發和幫助。 很多初學者接觸Linux 時間不長,還未完整地學習一遍 Linux,理解本節內容可能有些困難,可以先跳過本節,閱讀完整套教程後再回過頭來閱讀。 遠程伺服器關機及重啟時的註意事項 為什麼遠程伺服器不 ...
  • 本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 實現數位管動態顯示數字1~8。 硬體設計 在第一節的基礎上,在Proteus中添加電路如下圖所示,其中我們添加了 ...
  • 前面講過,Linux 系統中“一切皆文件”,所有文件都放置在以根目錄為樹根的樹形目錄結構中。在 Linux 看來,任何硬體設備也都是文件,它們各有自己的一套文件系統(文件目錄結構)。 因此產生的問題是,當在 Linux 系統中使用這些硬體設備時,只有將Linux本身的文件目錄與硬體設備的文件目錄合二 ...
  • 很多人看到系統修複模式這節內容時,都會有所感慨:Linux 的密碼破解太容易了,這樣的操作系統還安全嗎?Linux 不是以安全性著稱的嗎? 圖 1 密碼安全 本節,我們結合圖 1 解釋一下類似的問題。 我們一開始始為了安全,給用戶設定密碼,但是這樣密碼可以很容易地被單用戶模式破解。我們又想到,進入單 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...