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

目录

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.mzph.cn/bicheng/43458.shtml

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

相关文章

Electron 简单搭建项目

准备工作 全局安装 node npm创建文件夹,并执行 npm init安装 electron npm i electron --save-dev在 package.json 配置文件中的scripts字段下增加一条start命令: {"scripts": {"start": "electron ."} }由于配置中的入…

MYSQL八股文汇总

目录 1、三大范式 2、DML 语句和 DDL 语句区别 3、主键和外键的区别 4、drop、delete、truncate 区别 5、基础架构 6、MyISAM 和 InnoDB 有什么区别? 7、推荐自增id作为主键问题 8、为什么 MySQL 的自增主键不连续 9、redo log 是做什么的? 10、redo log…

CY5-丙氨酸荧光探针,生物医学研究应用-星戈瑞

在生物医学研究中,荧光探针技术因其高灵敏度、高特异性和非侵入性而受科研应用。其中,CY5-丙氨酸荧光探针作为一种生物分子标记工具,近年来在细胞成像、蛋白质定位等领域展现出科研潜力。本文将详细介绍CY5-丙氨酸荧光探针的结构、性质以及其…

App H5+ 实现下载、查看功能 前后端实现(SpringBoot)

<!doctype html><html><head><meta charset"utf-8"><title>维修指南</title><meta name"viewport" content"widthdevice-width, initial-scale1.0, minimum-scale0, maximum-scale0.85, user-scalableyes&quo…

下半年交火点:智驾全国都能开,智舱多模态大模型

“你猜一猜我现在参加什么样的活动呢&#xff1f;” “你参加的是WAIC&#xff0c;就是那个人工智能的大Party&#xff0c;超多科技高手都在这……” “你帮我介绍一下这本书吧。” “这书叫《反脆弱&#xff0c;从不确定性中获益》&#xff0c;讲的是怎么在混乱里找机会&am…

闲聊C++与面向对象思想

艾伦凯曾说&#xff0c;“I made up the term object-oriented, and I can tell you I did not have C in mind.”&#xff08;“我发明了术语‘面向对象’&#xff0c;可以告诉您我没有C”&#xff09;。 今天看到这句话&#xff0c;激发了笔者写一篇文章聊聊C与面向对象思想…

搞不清啊?伦敦金与上海金区别是?

进入黄金市场的朋友&#xff0c;有可能会被各式各样的黄金交易品种带得眼花缭乱&#xff0c;其实各品种虽然都以黄金作为投资标的物&#xff0c;但是也是各有不同的&#xff0c;下面我们就来比较一下相似的投资品种——伦敦金和上海金。 首先在比较之前&#xff0c;我们要搞清楚…

基于泰坦尼克号生还数据进行 Spark 分析

基于泰坦尼克号生还数据进行 Spark 分析 在这篇博客中&#xff0c;我们将展示如何使用 Apache Spark 分析著名的泰坦尼克号数据集。通过这篇教程&#xff0c;您将学习如何处理数据、分析乘客的生还情况&#xff0c;并生成有价值的统计信息。 数据解析 • PassengerId &#…

快速排序[原理,C++实现,注意事项,时间复杂度分析]

模板&#xff1a; //本模板来自ACwing void quick_sort(int q[],int l,int r) {if(l>r) return;int xq[lr>>1],il-1,jr1;while(i<j){do i;while(q[i]<x);do j--;while(q[j]>x); if(i<j) swap(q[i],q[j]);}quick_sort(q,l,j);quick_sort(q,j1,r); };原理&…

江苏高防服务器都有哪些优势?

江苏高防服务器所针对的应用群体是不同的&#xff0c;高防服务器与普通服务器的应用效果和功能上是有着很大的差别&#xff0c;所以企业与用户在进行挑选高防服务器时&#xff0c;会更加看重服务器的质量与服务效果&#xff0c;本文就来聊一下江苏高防服务器的优势有哪些吧&…

1509.三次操作后最大值与最小值的最小差

1.题目描述 给你一个数组 nums 。 每次操作你可以选择 nums 中的任意一个元素并将它改成 任意值 。 在 执行最多三次移动后 &#xff0c;返回 nums 中最大值与最小值的最小差值。 示例 1&#xff1a; 输入&#xff1a;nums [5,3,2,4] 输出&#xff1a;0 解释&#xff1a;我们最…

字典操作(获取类操作、添加更新类操作、字典删除类操作)

字典数据获取类操作 keys() 用来获取字典中所有的 key, 保存到一个列表中&#xff0c;并以 dict_keys类型返回 stu {name: Tom, age: 23, gender: male, address: BeiJing} ks stu.keys() print(ks)values() 用来获取字典中所有的 value &#xff0c;保存到一个列表中&#…

注册中心组成结构和基本原理解析

假如你正在设计和开发一个分布式服务系统&#xff0c;系统中存在一批能够独立运行的服务&#xff0c;而在部署上也采用了集群模式以防止出现单点故障。显然&#xff0c;对于一个完整的业务系统而言&#xff0c;这些服务之间需要相互调用并形成复杂的访问链路&#xff0c;一种可…

Casual decoder 和prefix decoder 区别

Causal Decoder&#xff08;因果解码器&#xff09;和Prefix Decoder&#xff08;前缀解码器&#xff09;是两种不同的语言模型架构&#xff0c;它们在处理文本生成任务时采用不同的注意力机制。 Causal Decoder是一种自回归模型&#xff0c;它在生成文本时只能依赖于已经生成…

mysql面试题 Day5

1 什么是事务&#xff1f; 事务是指 多个数据库操作组成一个逻辑执行单元&#xff0c;满足ACID四个条件。 A是指原子性&#xff0c;事务保证操作要么全部完成&#xff0c;要么全部不完成&#xff0c;不会出现部分完成的情况&#xff1b; C是指一致性&#xff0c;事务执行后&…

C++ 定时器触发

c定时器&#xff0c;能够定时触发&#xff0c;即每隔一段固定时间执行一下函数 #include <iostream> #include <thread> #include <chrono> #include <signal.h> #include <time.h> #include <cstring> #include <glog/logging.h>#…

SQL Server解决Float字段使用ISNULL时报错

SQL Server解决Float字段使用ISNULL时报错 一、前言1.报错内容2.解决案例 一、前言 1.报错内容 > [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]从数据类型 varchar 转换为 float 时出错。 (8114)。这个错误通常是由于SQL Server在执行ISNULL函数时遇到…

防抖和节流使用场景

防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;是两种常用的性能优化技术&#xff0c;用于限制某些高频率执行的函数的调用次数&#xff0c;从而优化性能和用户体验。它们的主要区别在于控制函数执行频率的策略不同。 防抖&#xff08;Debounce…

Mini-L-CTF-2022 minispringboot Thymeleaf模板注入 spel的绕过

Mini-L-CTF-2022 minispringboot Thymeleaf模板注入 spel的绕过 就是一个低版本的Thymeleaf注入 漏洞点 public class MainController {GetMapping({"/{language}"})public String test(PathVariable(name "language") String language, RequestParam(…

codesys多段直线电机跨电机控制

1. 电机描述 在X轴上有多段直线电机&#xff0c;如下图有9个&#xff0c;从X1到X9. 2.codesys程序结构 程序名称&#xff1a;Pou_two_motors 动作名称&#xff1a;ACT_move 把这个程序搞到任务配置里面 通过ethercat总线命名一下这些电机&#xff0c;方便调用。 3.程序内容 P…