STM32 低功耗模式 睡眠、停止和待机 详解

news2024/9/23 13:22:56

目录

1.睡眠模式(Sleep Mode)

2.停止模式(stop mode)

3.待机模式(Standby Mode)


STM32提供了三种低功耗模式,分别是睡眠模式(Sleep Mode)、停止模式(Stop Mode)和待机模式(Standby Mode),我们在做一些电池供电项目的时候,低功耗模式显得尤为重要。

模式名称进入唤醒唤醒后位置对 1.2V域时钟的影响对 VDD 域时钟的影响功耗
睡眠模式WFI任意中断睡眠位置开始执行CPU/CLK 关闭对其它时钟或模拟时钟源无影响偏高
WFE唤醒事件
停止模式PDDS 和LPDS 位+SLEEPDEEP 位+WFI或 WFE任意 EXTI 线(在 EXTI寄存器中配置,内部线和外部线)停止位置开始执行,但系统时钟变为HSI(内部高速时钟),需要重新配置时钟所有 1.2 V域时钟都关闭HSI 和HSE 振荡器关闭中等
待机模式PDDS 位+SLEEPDEEP 位+ WFI 或 WFEWKUP 引脚上升沿、RTC闹钟(钟 A 或闹钟B)、BTC 唤醒事件、RTC 入侵事件、RTC 时间戳事件、NRST 引脚外部复位、IWDG 复位相当于复位,系统重新开始运行所有 1.2 V域时钟都关闭HSI 和HSE 振荡器关闭最低

1.睡眠模式(Sleep Mode)

睡眠模式下,只有STM32的内核时钟被关闭,而外设时钟仍然保持运行,所有的I/O引脚都保持它们在运行模式时的状态,WFI模式下可以通过任意中断唤醒,WFE模式下可以任意唤醒事件唤醒,唤醒后程序继续睡眠位置往下运行。

void enter_sleep_mode(void){
	HAL_SuspendTick();//关闭系统systick中断,防止睡眠被systick中断打断
	HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);//进入WFI睡眠模式
	HAL_ResumeTick();//打开系统systic中断
}

上面是进入睡眠模式的代码,因为系统存在1ms一次的systick,所以要将其手动关闭,等待睡眠模式被唤醒以后再恢复。

2.停止模式(stop mode)

停止模式下,内核时钟和外设时钟都被关闭,但内核的1.8V供电区域仍然保持供电,SRAM和寄存器中的内容得以保留,IO口状态也可保持,可以通过任意一个外部中断来唤醒STM32,唤醒后需要重新初始化时钟和外设,当一个中断或唤醒事件导致退出停止模式时,HSI(高速内部时钟)通常被选为系统时钟。

void enter_stop_mode(void){
	HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1);//禁用唤醒引脚
	__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);//清除唤醒标志
	HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);//启用唤醒引脚
	HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);//进入停止模式
}

 进入停止模式之前先要重置一下唤醒引脚,注意停止模式结束以后,外设时钟被关闭,只能选用HSI重新初始化时钟和外设。

3.待机模式(Standby Mode)

待机模式是功耗最低的模式,关闭了所有的时钟,并关闭了内核的1.8V供电,除了电源控制/状态寄存器和备份寄存器之外,其他所有的寄存器和RAM数据都会丢失,可以通过唤醒引脚(如PA0)的上升沿、RTC(实时时钟)闹钟中断,或者复位操作来唤醒STM32,唤醒后,STM32相当于复位,程序将从复位地址开始执行。

由于待机模式被唤醒后相当于复位,从main函数重新初始化,所以不用再做特殊操作。

大家可以根据自己的项目需求去选择合适的低功耗模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1910751.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python基于you-get下载网页上的视频

​ 1.python 下载地址 下载 : https://www.python.org/downloads/ 2. 配置环境变量 配置 python_home 地址 配置 python_scripts 地址 在path 中加入对应配置 3. 验证 ​ C:\Users>python --version Python 3.12.4C:\Users>wheel version wheel 0.43.04. 下载 c…

公开课备课思路有哪些?

在准备公开课时,你是否曾感到迷茫,不知从何下手?作为一名教师,我们深知公开课的重要性,它不仅是展示个人教学水平的舞台,也是与同行交流、学习的机会。那么,如何高效地备课,让公开课…

Linux--深入理与解linux文件系统与日志文件分析

一、文件与存储系统的 inode 与 block 1.1 硬盘存储 最小存储单位:扇区( sector )每个扇区存储大小:512 字节1.2 文件存取--block block(块),每个 block 块大小为:4k由连续的八个扇区组成一个 block 块是文件索引最小的单位每个 block 块中包括:文件数据文件数据:就…

开源数字人项目Hallo

硬件条件: gpu最低12G 软件: cuda需支持 Python选择3.10吧,我的版本3.11 源码: GitHub - fudan-generative-vision/hallo: Hallo: Hierarchical Audio-Driven Visual Synthesis for Portrait Image Animation models文件&…

v-model双向绑定的实现原理

在前端处理表单时&#xff0c;我们常常需要将表单输入框的内容同步给 JavaScript 中相应的变量。手动连接值绑定和更改事件监听器可能会很麻烦&#xff0c;这里我们先用input属性写入输入框&#xff0c;代码如下&#xff1a; <template><view class"out"&g…

从零开始搭建互联网医院系统:技术与案例解析

随着信息技术的飞速发展和人们对医疗服务需求的增加&#xff0c;互联网医院逐渐成为医疗服务的重要模式。本文将详细介绍从零开始搭建互联网医院系统的关键技术和具体案例&#xff0c;帮助读者理解如何构建一个高效、可靠的互联网医院系统。 一、互联网医院系统的核心技术 1…

【EI稳定检索】第五届大数据、人工智能与软件工程国际研讨会(ICBASE 2024)

>>>【独立出版&#xff0c;Ei稳定检索】<<< 第五届大数据、人工智能与软件工程国际研讨会&#xff08;ICBASE 2024&#xff09; 2024年09月20-22日 | 中国温州 一轮截稿时间&#xff1a;2024年7月8日 二轮截稿时间&#xff1a;2024年8月5日 大会简介 *会议…

全能型CAE/CFD建模工具SimLab 详解Part1: Geomtry,轻松集成力学、电磁学、疲劳优化等功能

SimLab的建模功能 SimLab集成了结构力学&#xff0c;流体力学&#xff0c;电磁学&#xff0c;疲劳和优化等功能&#xff0c;是全能型的CAE / CFD建模工具。 具有强大的几何、网格编辑功能&#xff0c;能够快速的清理复杂模型&#xff0c;减少手动修复的工作量&#xff0c;提高…

通俗易懂--.csproj 文件

.csproj 文件 .csproj&#xff0c;是C#项目文件的扩展名&#xff0c;它是“C Sharp Project”的缩写。.net开发环境中建立项目时&#xff0c;会产生.csproj文件&#xff0c;这是C#的工程文件&#xff0c;其中记录了与工程有关的相关信息&#xff0c;例如包含的文件&#xff0c;…

192.168.1.1路由器管理系统使用教程

节选自&#xff1a;192.168.1.1路由器管理系统-厂商有哪些-如何使用-无法登录原因-苏州稳联 什么是 192.168.1.1 路由器管理系统&#xff1f; 192.168.1.1 是大多数家庭路由器的默认 IP 地址&#xff0c;用于访问路由器的管理控制台。通过这个管理系统&#xff0c;用户可以配…

快速掌握 ==== js 正则表达式

git 地址 https://gitee.com/childe-jia/reg-test.git 背景 在日常开发中&#xff0c;我们经常会遇到使用正则表达式的场景&#xff0c;比如一些常见的表单校验&#xff0c;会让你匹配用户输入的手机号或者身份信息是否规范&#xff0c;这就可以用正则表达式去匹配。相信大多数…

base SAS programming学习笔记10(combine data)

1.一对一合并 基本格式如下&#xff1a; data output-data-set; set data-set1; set data-set2;(data-set1和data-set2可以是相同的数据集&#xff0c;可以添加多个set 语句来实现上述的一对一合并) run; 输出数据集结果如下&#xff1a; a.会包含所有输入数据的变量名&#x…

Linux 系统 CPU 100% 异常问题,能否用一个 Shell 脚本完美解决?

昨天下午突然收到运维邮件报警&#xff0c;显示数据平台服务器cpu利用率达到了98.94%&#xff0c;而且最近一段时间一直持续在70%以上&#xff0c;看起来像是硬件资源到瓶颈需要扩容了&#xff0c;但仔细思考就会发现咱们的业务系统并不是一个高并发或者CPU密集型的应用&#x…

【linux服务器篇】-Redis-RDM远程连接redis

redis desktop manager 使用远程连接工具RDM连接redis 市面上比较常见的其中一款工具redis desktop manager 简单的说&#xff1a; Redis Desktop Manager 简单的来讲就是Redis可视化工具&#xff0c;可以让我们看到Redis中存储的内容。 redis desktop manager是一款功能强…

《梦醒蝶飞:释放Excel函数与公式的力量》10.2 COMPLEX函数

第二节 10.2 COMPLEX函数 10.2.1函数简介 COMPLEX函数是Excel中的一个工程函数&#xff0c;用于将实部和虚部组合成一个复数。复数广泛应用于工程、电气、物理等领域&#xff0c;COMPLEX函数提供了方便的复数表示和计算方法。 10.2.2语法&#xff1a; COMPLEX(real_num, i_…

AcWing 1073:树的中心 ← 树形DP

【题目来源】https://www.acwing.com/problem/content/1075/【题目描述】 给定一棵树&#xff0c;树中包含 n 个结点&#xff08;编号1~n&#xff09;和 n−1 条无向边&#xff0c;每条边都有一个权值。 请你在树中找到一个点&#xff0c;使得该点到树中其他结点的最远距离最近…

nvm 管理多版本 node

1、下载 先不安装node 下载 nvm 1.1.10-setup.zip 解压&#xff1a;nvm&#xff1a;https://nvm.uihtm.com/ 新建nodejs/node、nodejs/nvm文件夹用于存放node版本和nvm安装路径 安装nvm&#xff1a;上述链接有安装教程 查看是否安装成功&#xff1a;重新打开cmd 输入 nvm nv…

西瓜杯CTF(1)

#下班之前写了两个题&#xff0c;后面继续发 Codeinject <?php#Author: h1xaerror_reporting(0); show_source(__FILE__);eval("var_dump((Object)$_POST[1]);"); payload 闭合后面的括号来拼接 POST / HTTP/1.1 Host: 1dc86f1a-cccc-4298-955d-e9179f026d54…

044基于SSM+Jsp的个性化影片推荐系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

鼠标点击触发-----以控制开灯、宝箱触发为例

开灯 当点击时触发开灯效果 &#xff08;不用设置触发器&#xff09; using System.Collections; using System.Collections.Generic; using UnityEngine;public class OpenLight : MonoBehaviour {public Transform light;bool isOpen;private void OnMouseDown(){if (!isOpe…