STM32學習和實踐筆記(33):待機喚醒實驗

1.STM32待機模式介紹

? 很多單片機具有低功耗模式,比如MSP430、STM8L等,我們的STM32也不例外。默認情況下,系統復位或上電復位后,微控制器進入運行模式。在運行模式下,HCLK CPU提供時鐘,并執行程序代碼。這是正常的一般運行模式。

當 CPU 不需繼續運行(例如等待外部事件)時,可以利用多種低功耗模式來節省功耗。用戶需要根據最低電源消耗、最快速啟動時間和可用的喚醒源等條件,選定一個最佳的低功耗模式。

? 當然在運行模式下,也可以通過如下方式降低功耗

1)降低系統時鐘速度

2不使用 APBxAHB 外設時,將對應的外設時鐘關閉

STM32 提供了 3 種低功耗模式,以達到不同層次的降低功耗的目的,這三種模式如下:

1)睡眠模式CM3 內核停止工作,外設仍在運行

2)停止模式(所有時鐘都停止

(3)待機模式( 1.8 V 內核電源關閉)

?? 這三種模式所需的功耗是逐級遞減,也就是說待機模式功耗是最低的。三種低功耗模式匯總表如圖所示:?

? ?????????

本章我們僅對STM32的待機模式進行介紹,其他2種模式可以參考《STM32F10x中文參考手冊》-4電源控制器(PWR)章節,里面有詳細的介紹。

?睡眠模式中,僅關閉了內核時鐘,內核停止運行,但其片上外設, CM3 核心的外設全都照常運行。

停止模式中,進一步關閉了其它所有的時鐘,于是所有的外設都停止了工作,但由于其 1.8V 區域的部分電源沒有關閉,還保留了內核的寄存器、內存的信息,所以從停止模式喚醒,并重新開啟時鐘后,還可以從上次停止處繼續執行代碼。

待機模式中,它除了關閉所有的時鐘,還把 1.8V 區域的電源也完全關閉了,也就是說,從待機模式喚醒后,由于沒有之前代碼的運行記錄,只能對芯片復位,重新檢測BOOT條件,從頭開始執行程序。

那么我們如何進入待機模式呢?其實很簡單,只要按圖所示的步驟執行就可以了。

? 從待機模式喚醒后,程序將按照復位(啟動引腳采樣、復位向量已獲取等)后的方式重新執行。電源控制/狀態寄存器(PWR_CSR)將會指示內核由待機狀態退出。

? 在進入待機模式后,除了復位引腳以及被設置為防侵入或校準輸出時的 TAMPER (PC13)引腳和被使能的喚醒引腳WK_UP 腳(PA0)),其他的 IO 引腳都將處于高阻態

2.待機模式配置步驟

? 接下來我們介紹下如何使用庫函數進入和退出待機模式。這個也是在編寫程序中必須要了解的。具體步驟如下:(電源管理相關庫函數在stm32f10x_pwr.c和stm32f10x_pwr.h文件中

1)使能電源時鐘

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);

2)設置WK_UP引腳為喚醒源

PWR_WakeUpPinCmd(ENABLE);

3)進入待機模式

PWR_EnterSTANDBYMode();//進入待機模式

PWR_ClearFlag(PWR_FLAG_WU);//清除Wake-up 標志??????????

3.硬件電路

? 本實驗使用到硬件資源如下:

(1)D1指示燈

(2)串口1

(3)K_UP按鍵

D1指示燈用來提示系統正常運行,K_UP按鍵用來喚醒待機模式,串口1用來輸出提示信息。

4.編寫待機喚醒程序

? 本實驗所要實現的功能是:系統運行時D1指示燈閃爍,5秒后進入待機模式,D1指示燈熄滅,同時串口printf輸出相關提示信息,通過K_UP按鍵實現喚醒。程序框架如下:

(1)配置進入與退出待機模式

(2)編寫主函數

main.c

#include "system.h"
#include "led.h"
#include "SysTick.h"
#include "usart.h"
#include "input.h"
#include "wakeup.h"int main()
{u8 i;SysTick_Init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中斷優先級分組LED_Init();USART1_Init(9600);while(1){for (i=9;i>0;i--){printf("time:=%d\r\n",i);led1=!led1;delay_ms(1000);}printf("進入待機模式\r\n");delay_ms(1000);Enter_StandbyMode();}
}

wakeup.c

#include "wakeup.h"void Enter_StandbyMode()
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//1)使能電源時鐘PWR_WakeUpPinCmd(ENABLE);//(2)設置WK_UP引腳為喚醒源PWR_ClearFlag(PWR_FLAG_WU);//清除Wake-up 標志PWR_EnterSTANDBYMode();//進入待機模式}

?wakeup.h

#ifndef _wakeup_H
#define _wakeup_H#include "system.h"void Enter_StandbyMode(void);#endif

? 以上程序燒錄到開發板上測試,結果如下。實驗是成功的。

??

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

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

相關文章

kafka學習筆記06

Kafka數據存儲流程和log日志講解 講解分布式應用核心CAP知識 Kafka數據可靠性保證原理之副本機制Replica介紹《上》 Kafka數據可靠性保證原理之副本機制Replica介紹《下》 Kafka數據可靠性保證原理之ISR機制講解 Kafka的HighWatermark的作用你知道多少

暑期來臨,AI智能視頻分析方案筑牢防溺水安全屏障

隨著夏季暑期的來臨,未成年人溺水事故頻發。傳統的防溺水方式往往依賴于人工巡邏和警示標識的設置,但這種方式存在人力不足、反應速度慢等局限性。近年來,隨著視頻監控智能分析技術的不斷發展,其在夏季防溺水中的應用也日益凸顯出…

ubuntu22 搭建nginx高可用集群(VIP(keepalived) + 負載均衡)

#在所有節點安裝nginx #ps: 如果要使用tcp流轉發:需用二進制包安裝 make編譯時加入stream流的參數。 推薦直接安裝openresty【默認支持stream等nginx模塊,還附帶了很多常用的lua庫】 apt install -y net-tools sudo apt install -y nginx vim /etc/…

恒創科技:無法與服務器建立安全連接怎么解決?

在使用互聯網服務時,有時會出現無法與服務器建立安全連接的問題,此錯誤消息通常出現在嘗試訪問需要安全連接的網站(例如使用 HTTPS 的網站)時,這可能是由于多種原因造成的,以下是一些常見的解決方法,幫助你解決問題。 …

聚道云軟件連接器:打通易快報與保融資金系統,實現高效財務管理

一、客戶介紹:食品企業,引領健康零食新風尚 某食品行業的公司作為國內領先的集研發、生產、銷售為一體的現代化辣味休閑食品企業。該公司秉承“健康、美味、安全”的理念,不斷創新和進取,為消費者帶來了一系列美味可口的辣味休閑…

msvcp100.dll丟失怎樣修復?幾種快速有效修復msvcp100.dll丟失的方法

在使用電腦時是不是遇到過關于msvcp100.dll丟失文件丟失的情況?出現這樣的情況有什么辦法可以將丟失的msvcp100.dll文件快速恢復?今天的這篇文章就將教大家幾種能夠有效的解決msvcp100.dll丟失問題的方法。 方法一:重啟電腦 重啟電腦是一種簡…

參數高效微調PEFT(三)快速入門LoRA、AdaLoRA

參數高效微調PEFT(三)快速入門LoRA、AdaLoRA 我們已經了解了HuggingFace中peft庫的幾種高效微調方法。 參數高效微調PEFT(一)快速入門BitFit、Prompt Tuning、Prefix Tuning 參數高效微調PEFT(二)快速入門P-Tuning、P-Tuning V2 今天我們繼續了解大火的高效微調方法LoRA以及…

MyBatis基礎理解教程,詳細分步基礎查詢表數據練習(通俗易懂、實時更新)

一、MyBatis是什么 MyBatis 是一個持久層框架,簡化JDBC開發,它提供了一個從 Java 應用程序到 SQL 數據庫的橋梁,用于數據的存儲、檢索和映射。MyBatis 支持基本的 SQL 操作、高級映射特性以及與 Maven 等構建工具的集成。 二、持久層是什么…

IDEA增加.gitignore文件后的處理

IDEA增加 .gitignore 文件后,但還是被 git 跟蹤了。 我的文件已經被添加到 .gitignore 中,但仍然被 Git 跟蹤, 文件被修改后commint中就會存在此文件。 原因: 文件已經被提交過了 如果文件在添加到 .gitignore 之前已經被提交到 Git 倉庫中,…

Spring boot集成通義千問大模型

Spring boot集成通義千問大模型 背景 我在用idea進行java開發時發現了通義靈碼這款免費的智能代碼補全插件,用了一段時間了,感覺很不錯。就想著在自己的項目中也能集成通義千問大模型實現智能回答,畢竟對接openai需要解決網絡問題&#xff…

戰略合作 | 竹云賦能雁塔區數字經濟高質量發展

2024年5月30日,由西安市數據局指導,中共西安市雁塔區委、西安市雁塔區人民政府主辦的 “雁塔區企業數字化轉型發展大會” 在西安開幕。 本次活動以“數智雁塔,引領未來”為主題,特邀業內150余位政府、數字化服務企業、傳統行業企…

Kubernetes 之 DaemonSet 基本原理

Kubernetes 之 DaemonSet 基本原理 DaemonSet 定義 DaemonSet 確保全部(或者某些)節點上運行一個 Pod 的副本。 當有節點加入集群時, 也會為他們新增一個 Pod 。 當有節點從集群移除時,這些 Pod 也會被回收。刪除 DaemonSet 將會…

先導微型數控桌面式加工中心

隨著數控技術、傳感器技術、人工智能等技術的不斷發展,制造業的快速發展和技術的不斷進步,小型五軸加工中心的性能將不斷提升,五軸聯動技術作為解決異性復雜零件高效優質加工問題的重要手段,使其具有更廣泛的應用前景。小型五軸加…

【啟明智顯分享】國產自主ZX7981P Wi-Fi6 5G-CPE開發板有哪些優勢?

在當前競爭激烈的智能設備市場中,高性能與低功耗的開發板已然成為各大產品追求的關鍵優勢。 今天我們從國產自主研發的ZX7981P Wi-Fi6 5G-CPE開發板的特點出發,分析他是否滿足市場追求的特點。 主要特點: 1. 強大配置,穩定可靠 …

5.30 學習總

刷題記錄(Codeforces Round 947 (Div. 1 Div. 2)B,C題)和Codeforces Round 948 (Div. 2)B題 一.B. 378QAQ and Mochas Array B. 378QAQ and Mochas Array time limit per test 1 second memory limit per test 256 megabytes in…

長難句5.30

Researchers measured people’s cortisol, which is a stress marker, while they were at work and while they were at home and found it higher at what is supposed to be a place of refuge. 研究人員測量了人們在工作中和在家里的皮質醇(壓力的一種標志),結…

在 JavaScript 中循環遍歷數組的多種方法

在JavaScript編程中,遍歷數組是一個非常常見的操作。根據不同的需求和JavaScript的不同版本,我們有多種方法來完成這一操作。本文將介紹幾種有效的方法,包括現代的和傳統的方式,同時分析每一種方法的優缺點。 1. 使用 for...of 語法 for...of 是在 ECMAScript 2015(ES6)…

Spring Boot集成statemachine快速入門demo

1.什么是statemachine? Spring Statemachine 是應用程序開發人員在 Spring 應用程序中使用狀態機概念的框架,從設計層面分析:狀態機目的是解決復雜的狀態管理流程,保證程序單一原則和開閉原則;業務角度分析&#xff1…

【面試】什么是Java虛擬機

目錄 1. 說明2. 關鍵點 1. 說明 1.Java虛擬機(Java Virtual Machine,簡稱JVM)是運行所有Java程序的抽象計算機,是Java語言的運行環境。2.JVM是Java平臺無關性的關鍵,它允許Java程序在任何支持JVM的硬件和操作系統上運…

【大數據面試題】34 手寫一個 Flink SQL 樣例

一步一個腳印,一天一道大數據面試題 博主希望能夠得到大家的點贊收,藏支持!非常感謝~ 點贊,收藏是情分,不點是本分。祝你身體健康,事事順心! 我們來看看 Flink SQL大概流程和樣例: 流程: 1.創建 流處理環境 StreamExecutionEnvironment env 2.創建 表環境 StreamTab…