STM32入門筆記15_PWR電源管理模塊

PWR和低功耗模式

PWR簡介

  • PWR(Power Control) 電源控制
  • PWR負責管理STM32內部的電源供電部分,可以實現可編程電壓檢測器和低功耗模式的功能
  • 可編程電壓檢測器(PVD) 可以監控VDD電源電壓,當VDD下降到PVD閾值以下或上升到PVD閾值之上時,PVD會觸發中斷,用于執行緊急關閉任務
  • 低功耗模式包括睡眠模式(Sleep)、停機模式(Stop)和待機模式(Standby),可在系統空閑時,降低STM32的功耗,延長設備使用時間

電源框圖

在這里插入圖片描述

  • V D D 、 V S S V_{DD}、V_{SS} VDD?VSS?給數字電路供電
  • V D D A 、 V S S A V_{DDA}、V_{SSA} VDDA?VSSA?給模擬電路供電
  • 低電壓檢測器在檢測到 V D D 和 V S S V_{DD}和V_{SS} VDD?VSS?之間電壓低于閾值后,會切換后備供電區域的供電電源為 V B A T V_{BAT} VBAT?,而當 V D D 和 V S S V_{DD}和V_{SS} VDD?VSS?供電正常時,則由 V D D 和 V S S V_{DD}和V_{SS} VDD?VSS?供電
  • 芯片內部的數字電路(1.8V供電區域)供電電壓為1.8V

在這里插入圖片描述

  • 關于 V D D A 和 V S S A V_{DDA}和V_{SSA} VDDA?VSSA?的作用參考手冊, 注意在STM32F103C8T6中未引出

上電復位和掉電復位

在這里插入圖片描述

可編程電壓檢測器

在這里插入圖片描述

在這里插入圖片描述

低功耗模式

在這里插入圖片描述

  • 一般使用WFI (wait for interrupt) 等待中斷
  • 睡眠模式(Sleep Mode)下, 任一中斷都可以喚醒MCU,一般省電
  • 停機模式(Stop Mode)下,僅外部中斷能夠喚醒MCU,同時1.8V區域的時鐘全部關閉,HSI和HSE的時鐘也關閉,但電壓調節器仍然打開,SRAM和寄存器中的數據不會丟失
  • 待機模式(Standby Mode)下,僅特定事件能夠喚醒MCU,相較于停機模式電壓調節器關閉,SRAM和寄存器中數據丟失
  • Sleep ModeStop Mode喚醒后程序從進入低功耗模式的代碼開始重新執行,而Standby Mode喚醒后程序從頭開始執行(因為數據都丟失了)
  • 值的注意的是,Stop Mode喚醒后默認使用HSI (8MHz)作為系統時鐘, 若想用HSE則需重新調用SystemInit()函數

模式選擇

在這里插入圖片描述

  • 對照該圖和參考手冊配置自己需要的模式

睡眠模式

  • 執行完WFI/WFE指令后,STM32進入睡眠模式,程序暫停運行,喚醒后程序從暫停的地方繼續運行

  • SLEEPONEXIT位決定STM32執行完WFI或WFE后,是立刻進入睡眠,還是等STM32從最低優先級的中斷處理程序中退出時進入睡眠 (WFI或WFE寫主函數里立刻進入睡眠還是先處理中斷差別不大)

  • 在睡眠模式下,所有的I/O引腳都保持它們在運行模式時的狀態 (為進一步降低能耗,在執行WFI/WFE前關閉能關閉的外設)

  • WFI指令進入睡眠模式,可被任意一個NVIC響應的中斷喚醒

  • WFE指令進入睡眠模式,可被喚醒事件喚醒

停止模式

  • 執行完WFI/WFE指令后,STM32進入停止模式,程序暫停運行,喚醒后程序從暫停的地方繼續運行

  • 1.8V供電區域的所有時鐘都被停止,PLL、HSI和HSE被禁止,SRAM和寄存器內容被保留下來

  • 在停止模式下,所有的I/ O引腳都保持它們在運行模式時的狀態 (為進一步降低能耗,在執行WFI/WFE前關閉能關閉的外設)

  • 當一個中斷或喚醒事件導致退出停止模式時,HSI被選為系統時鐘

  • 當電壓調節器處于低功耗模式下,系統從停止模式退出時,會有一段額外的啟動延時

  • WFI指令進入停止模式,可被任意一個EXTI中斷喚醒 (RTC和PVD可借道EXTI中斷通道將MCU從停止模式喚醒)

待機模式

  • 執行完WFI/WFE指令后,STM32進入待機模式,喚醒后程序從頭開始運行

  • 整個1.8V供電區域被斷電,PLL、HSI和HSE也被斷電,SRAM和寄存器內容丟失,只有備份的寄存器和待機電路維持供電

  • 在待機模式下,所有的I/O引腳變為高阻態(浮空輸入)(不用手動關閉外設)

  • WKUP引腳的上升沿、RTC鬧鐘事件的上升沿、NRST引腳上外部復位、IWDG復位退出待機模式

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

  • 除了低功耗模式能降低電源消耗外,降低系統主頻和關閉未使用的外設時鐘也是降低電源消耗的很好的方式
  • 系統主頻通過時鐘樹可以看出,由HSE接外部晶振提供(一般8MHz),經過PLL得到倍頻,然后作為系統主頻

在這里插入圖片描述

  • 關于系統主頻的修改,相關的文件是system_stm32f10x.c,通過宏定義可修改成以下時鐘頻率, 具體函數的執行流程可以自己看或看江科大的視頻
    在這里插入圖片描述

  • 如何取消只讀文件的限制

在這里插入圖片描述

打開文件屬性,取消可讀后確定
在這里插入圖片描述

文件上的鑰匙消失,現在可以修改文件中關于主頻的宏定義

在這里插入圖片描述

主要代碼

功能為單片機運行10s即進入停止模式, 當檢測到外部中斷后, 退出停止模式, 運行10s后再次進入停止模式

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "MyRTC.h"
#include "key.h"
#include "LED.h"
#include "Timer.h"
#include "valve.h"uint8_t Stop_Time;int main(void)
{OLED_Init();MyRTC_Init(); // RTC初始化Key_Init();  // 按鍵初始化LED_Init();  // LED 初始化Timer_TIM3_Init();  // 定時器初始化Valve_Init();  // 電磁閥端口初始化RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);  // 打開PWR時鐘 *OLED_ShowString(1, 1, "Date:XXXX-XX-XX");OLED_ShowString(2, 1, "Time:XX:XX:XX");Stop_Time = 0;while (1){MyRTC_ReadTime();OLED_ShowNum(1, 6, MyRTC_Time[0], 4);OLED_ShowNum(1, 11, MyRTC_Time[1], 2);OLED_ShowNum(1, 14, MyRTC_Time[2], 2);OLED_ShowNum(2, 6, MyRTC_Time[3], 2);OLED_ShowNum(2, 9, MyRTC_Time[4], 2);OLED_ShowNum(2, 12, MyRTC_Time[5], 2);OLED_ShowNum(3, 1, Stop_Time, 3);if(Stop_Time > 100){Stop_Time = 0;OLED_Clear();  // 屏幕熄滅RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, DISABLE);  // 關閉GPIOB時鐘PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);  // 進入停止模式*SystemInit();  // 重新設置時鐘OLED_Init();Valve_Init();  // 電磁閥端口初始化OLED_ShowString(1, 1, "Date:XXXX-XX-XX");OLED_ShowString(2, 1, "Time:XX:XX:XX");}}
}/**
* @brief 按鍵中斷服務函數 PA8
*/
void EXTI9_5_IRQHandler(void)
{if(EXTI_GetFlagStatus(EXTI_Line8)){Delay_ms(10);if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8) == 0){LED_Turn();}EXTI_ClearITPendingBit(EXTI_Line8);}
}/**
* @brief 定時器中斷服務函數 TIM3_UpDate
*/
void TIM3_IRQHandler(void)
{if(TIM_GetITStatus(TIM3, TIM_IT_Update)){Stop_Time += 1;}TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
  • 要進入停止模式只需通過RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE); 打開PWR時鐘
  • 再在需要進入停止模式的時候調用PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI); 即可進入停止模式
  • 進入停止模式前,根據需求關閉耗電的外設
  • 從停止模式退出后,系統使用HSI時鐘主頻默認為8Mhz, 需重新調用SystemInit()函數重新設置時鐘為HSE使主頻恢復為72MHz
  • 從停止模式退出后,應重新初始化關閉的外設

效果展示

【STM32停止模式】

參考資料

模式退出后,系統使用HSI時鐘主頻默認為8Mhz, 需重新調用SystemInit()函數重新設置時鐘為HSE使主頻恢復為72MHz

  • 從停止模式退出后,應重新初始化關閉的外設

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165780.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165780.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165780.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C++學習之路(一)什么是C++?如何循序漸進的學習C++?【純干貨】

C是一種高級編程語言,是對C語言的擴展和增強。它在C語言的基礎上添加了面向對象編程(OOP)的特性,使得開發者能夠更加靈活和高效地編寫代碼。 C的名字中的“”符號表示在C語言的基礎上向前發展一步,即“加加”&#x…

iOS APP包分析工具 | 京東云技術團隊

介紹 分享一款用于分析iOSipa包的腳本工具,使用此工具可以自動掃描發現可修復的包體積問題,同時可以生成包體積數據用于查看。這塊工具我們團隊內部已經使用很長一段時間,希望可以幫助到更多的開發同學更加效率的優化包體積問題。 工具下載…

LeeCode前端算法基礎100題(4)- 無重復字符的最長子串

一、問題詳情: 給定一個字符串 s ,請你找出其中不含有重復字符的 最長子串 的長度。 示例 1: 輸入: s "abcabcbb" 輸出: 3 解釋: 因為無重復字符的最長子串是 "abc",所以其長度為 3。示例 2: 輸入: s "bbbbb…

在VMware Workstation的Centos上實現KVM虛擬機的安裝部署:詳細安裝部署過程(保姆級)

KVM概述 ? 以色列qumranet公司研發,后被RedHad公司收購 (1)kvm只支持x86平臺 (2)依賴于 HVM,inter VT AMD-v ? KVM是(Kernel-based Virtual Machine)的簡稱,是一個開源的系統虛擬…

Spark---補充算子

一、Spark補充Transformation算子 1、join,leftOuterJoin,rightOuterJoin,fullOuterJoin 作用在K,V格式的RDD上。根據K進行連接,對(K,V)join(K,W)返回(K,&a…

世界復合醫學雜志世界復合醫學雜志社世界復合醫學編輯部2023年第8期目錄

論著 能譜(Revolution)CT胸腹聯合胸痛三聯CTA掃描對急性胸痛患者疾病的差異分析 左明飛;溫麗娟;焦宇; 1-38 超聲引導下肩袖間隙注射及肩胛上神經阻滯聯合觸發點針刺治療粘連性肩關節囊炎的療效分析 余菲;王嫻;戴甫成;張維;劉武;孫勇; 4-8 神…

python tkinter 使用(六)

python tkinter 使用(六) 本文主要講述tkinter中進度條的使用。 1:確定的進度條 progressbar tkinter.ttk.Progressbar(root, mode"determinate", maximum100, value0) progressbar.pack()def updateProgressBar():for i in range(100):pr…

【Unity】 UGUI的PhysicsRaycaster (物理射線檢測)組件的介紹及使用

1. 什么是PhysicsRaycaster組件? PhysicsRaycaster是Unity UGUI中的一個組件,用于在UI元素上進行物理射線檢測。它可以檢測鼠標或觸摸事件是否發生在UI元素上,并將事件傳遞給相應的UI元素。 2. PhysicsRaycaster的工作原理 PhysicsRaycast…

【Proteus仿真】【51單片機】智能垃圾桶設計

文章目錄 一、功能簡介二、軟件設計三、實驗現象聯系作者 一、功能簡介 本項目使用Proteus8仿真51單片機控制器,使用報警模塊、LCD1602液晶模塊、按鍵模塊、人體紅外傳感器、HCSR04超聲波、有害氣體傳感器、SG90舵機等。 主要功能: 系統運行后&#xf…

基于GPRS的汽車碰撞自動報警系統(論文+源碼)

1. 系統設計 本次基于GPRS的汽車碰撞自動報警系統的設計中,其主要的目標功能如下:1、實時檢測當前的GPS精度和緯度坐標;2.當發生碰撞后系統自動將當前的信息通過GPRS數據發送到遠端數據進行報警;3、系統在碰撞后一方面進行本地報警…

聽GPT 講Rust源代碼--src/tools(2)

題圖來自AI生成 File: rust/src/tools/rust-analyzer/crates/hir-def/src/src.rs rust-analyzer 是一個 Rust 語言的語法分析器和語義分析器,用于提供代碼補全、導航、重構等開發工具。而 rust-analyzer 的代碼實現存儲在 rust/src/tools/rust-analyzer 這個文件夾中…

010 OpenCV中的4種平滑濾波

目錄 一、環境 二、平滑濾波 2.1、均值濾波 2.2、高斯濾波 2.3、中值濾波 2.4、雙邊濾波 三、完整代碼 一、環境 本文使用環境為: Windows10Python 3.9.17opencv-python 4.8.0.74 二、平滑濾波 2.1、均值濾波 在OpenCV庫中,blur函數是一種簡…

遞歸剪枝題

期中考終于考完了,整道題獎勵下自己 我一北大同學問我的,說他遞歸超時了,叫我想一個辦法 后面他說他加了個剪枝就過了,然后我自己嘗試了一個方法: 就是先把城市按1到n排列,然后考慮互換,如果互…

考過了PMP,面試的時候應該怎么辦?

近期喜番在后臺收到了很多同學們的私信,表示自己已經過了8月份的PMP考試,開始著手往項目管理崗位轉型,但是對于項目管理崗位的面試卻一籌莫展。放輕松,大家的需求喜番都了解了,喜番給大家總結了一些項目經理在面試的時…

SpringCloud 微服務全棧體系(十七)

第十一章 分布式搜索引擎 elasticsearch 七、搜索結果處理 搜索的結果可以按照用戶指定的方式去處理或展示。 1. 排序 elasticsearch 默認是根據相關度算分(_score)來排序,但是也支持自定義方式對搜索結果排序。可以排序字段類型有&#…

【Python】Fastapi swagger-ui.css 、swagger-ui-bundle.js 無法加載,docs無法加載,redocs無法使用

使用fastapi的時候,swagger-ui.css 、swagger-ui-bundle.js、redoc.standalone.js 有時候無法加載(國內環境原因或者是局域網屏蔽),此時就需要自己用魔法下載好對應文件,然后替換到fastapi里面去。 fastapi里面依靠這…

計算機視覺(CV)技術的優勢:

計算機視覺(CV)技術的優勢: 自動化:計算機視覺技術可以自動化處理大量的視覺數據。 精度和速度:計算機視覺技術可以在很短的時間內對大量的圖像數據進行處理,并且可以達到非常高的精度。 可靠性&#xff…

【微軟技術棧】使用(TAP)基于任務的異步模式

本文內容 使用 Await 掛起執行取消異步操作監視進度使用內置的基于任務的連結符構建基于任務的連結符構建基于任務的數據結構 c#使用基于任務的異步模式 (TAP) 處理異步操作時,可以使用回叫實現等待,而不會阻塞。 對于任務,這可通過 Task.C…

java學習part07數組工具類

1比較內容 2輸出信息 3值填充 4快速排序 5二分查找 負數沒找到,其他表示下標

ES6 — ES14 新特性

一、ES6 新特性(2015) 1. let和const 在ES6中,新增了let和const關鍵字,其中 let 主要用來聲明變量,而 const 通常用來聲明常量。let、const相對于var關鍵字有以下特點: 特性varletconst變量提升??全局…