【STM32CubeMX】低功耗模式

前言

  本文讲解STM32F10X的低功耗模式,部分资料参考自STM32手册。STM32F10X提供了三种低功耗模式:睡眠模式(Sleep mode)、停机模式(Stop mode)和待机模式(Standby mode)。这些低功耗模式可以有效减少系统功耗,延长电池寿命,对于需要长时间运行的电池供电设备尤为重要。

环境

  • STM32F103ZET6开发板(战舰V3),72MHz主频
  • 基于STM32CubeMX生成的HAL库代码
  • keil5中,进行代码的编写修改

内容

在这里插入图片描述

  因为我使用的是STM32CubeMX生成的HAL库代码,所以说PWR时钟的使能(__HAL_RCC_PWR_CLK_ENABLE();)已经在HAL_MspInit();里默认添加有了,如果是其它方式生成的代码,则可能需要手动添加。

  关于唤醒的验证,我在下述验证中,就配置了PA0为外部中断模式,下拉,上升沿触发,开启对应NVIC,来实验了中断唤醒是没问题的,就是通过一条杜邦线PA0连接3.3V,拔插来触发就行了。事件唤醒还没有实验探究。

睡眠模式

在这里插入图片描述

  睡眠模式,它使处理器暂停执行,并且可以通过外部事件或中断来唤醒。在睡眠模式下,(Cortex™-M3内核停止,所有外设包括Cortex-M3核心的外设,如NVIC、系统时钟(SysTick)等仍在运行,以便在唤醒时快速恢复正常运行。

睡眠模式的进入:两种睡眠模式,SLEEP-NOW或 SLEEP-ON-EXIT。

  • SLEEP-NOW:如果SLEEPONEXIT位被清除,当WRI或WFE被执行时,微控制器立即进入睡眠模式。
  • SLEEP-ON-EXIT:如果SLEEPONEXIT位被置位,系统从最低优先级的中断处理程序中退出时,微控制器就立即进入睡眠模式。

睡眠模式的唤醒:两种唤醒方式,任一中断(WFI)或唤醒事件(WFE)。

  • WFI:任意一个中断的触发都能唤醒该模式。
  • WFE:唤醒事件
// SLEEP-NOW模式 WFI唤醒
// 滴答定时器的中断也会触发唤醒,所以说以WFI唤醒时,要先停止滴答的计数
HAL_SuspendTick();	//停止滴答定时器的计数
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
HAL_ResumeTick();	//启动滴答定时器的计数// SLEEP-NOW模式 WFI唤醒
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFE);//  SLEEP-ON-EXIT模式 WFI唤醒
HAL_PWR_EnableSleepOnExit();	//  按手册要求 SLEEPONEXIT = 1 
HAL_SuspendTick();				//停止滴答定时器的计数
HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI);
HAL_ResumeTick();				//启动滴答定时器的计数

停机模式

在这里插入图片描述

  停止模式是在Cortex™-M3的深睡眠模式基础上结合了外设的时钟控制机制,在停止模式下电压 调节器可运行在正常或低功耗模式。此时在1.8V供电区域的的所有时钟都被停止,PLL、HSI和 HSE RC振荡器的功能被禁止,SRAM和寄存器内容被保留下来。在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。当一个中断或唤醒事件导致退出停止模式时,会自动选用内部高速时钟(HSI RC振荡器)为系统时钟

  该模式有着两种唤醒模式,大致也跟上述的睡眠模式一样,就不过多介绍了。

// 停机模式 WFI唤醒
HAL_SuspendTick();	//停止滴答定时器的计数
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
HAL_ResumeTick();	//启动滴答定时器的计数
// 停机模式 WFE唤醒
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFE);

待机模式

在这里插入图片描述

  待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个 1.8V供电区域被断电。PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失。只有备份的寄存器和待机电路维持供电

  在HAL中进入待机模式很简单,只需要一行代码,就能进入,当然在待机前,还有设置唤醒源。这里的程序是设置用于WKUP引脚(PA0)上的上升沿后,进行唤醒。

  待机模式唤醒,在通过唤醒源__唤醒后,代码执行等同于复位后的执行__,而不是从进入待机模式的程序继续执行的,这一点是需要注意的。待机模式下的输入/输出端口状态:在待机模式下,所有的I/O引脚处于高阻态,除了以下的引脚:1. 复位引脚(始终有效) 2. 当被设置为防侵入或校准输出时的TAMPER引脚 3. 被使能的唤醒引脚

//这里是先判断唤醒引脚PA0的状态
//因为上面说了,待机模式唤醒后等同于复位,所以说要检验待机模式的唤醒,不能直接把进入待机模式的程序直接放在程序中,否则一唤醒,又执行都进入待机模式的程序,这样就约等于死循环。
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0) == 0)
{HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);   //设置WKUP用于唤醒HAL_PWR_EnterSTANDBYMode();					// 进入待机模式  
}

总结

功耗:睡眠模式 > 停机模式 > 待机模式

唤醒速度:睡眠模式 > 停机模式 > 待机模式

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

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

相关文章

2023国赛数学建模A题思路模型代码汇总 高教社杯

本次比赛我们将会全程更新思路模型及代码,大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…

如何使用CSS实现一个瀑布流布局?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现瀑布流布局⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚…

Kafka单节点部署

🎈 作者:互联网-小啊宇 🎈 简介: CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作,擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…

高速、稳定、安全:4G工业路由器在户外环境下的组网优势

能够在无人值守的户外环境下实现组网和远程监控功能的4G工业路由器!工业级路由器具备防尘、防水、耐高温等特性,适用应用在恶劣的户外及工业场景中,如远程农田监测、驾考科目二/科目三、智能交通系统、环境监控、煤矿数据采集、水利远程管理等…

C++——oo的魅力之多态

文章目录 多态的概念多态的定义和实现多态的构成条件虚函数重写的两个例外协变(基类和派生类虚函数返回值类型不同)析构函数的重写(基类和派生类析构函数名字不同) c11 override 和 final关键字 重载,重写(覆盖), 隐藏(重定义)对比抽象类(纯虚函数)多态的…

SOLIDWORKS基准面介绍

SOLIDWORKS是一款广泛应用于机械设计领域的三维建模软件,其中基准面是在建模过程中必不可少的要素。本文将介绍什么是SOLIDWORKS基准面,以及它在设计中的作用。 SOLIDWORKS基准面是指在设计过程中用来确定草图绘制、特征创建的参考平面。 SOLIDWORKS基…

天锐绿盾安全U盘系统

安全U盘系统 01 简介 天锐绿盾安全U盘系统,是一款致力于保障U盘数据内容安全的产品。通过严格身份认证、便捷安全的密保机制、智能的U盘锁定或自毁设置、详细的文件操作日志、文件粉碎、设置还原等,天锐绿盾安全U盘系统为您U盘的数据保驾护航&#xff0…

python 打印一个条形堆积图

背景 今天介绍一个不使用 matplot,通过 DebugInfo模块打印条形堆积图 的方法。 引入模块 pip install DebugInfo打印销售转化数据 下面的代码构建了两个销售团队,团队A 和团队B;两个团队的销售数据构成了公司总的销售成果。以条形堆积图的…

SQL Server、MySQL和Oracle数据库分页查询的区别与联系

摘要:本文将通过一个现实例子,详细解释SQL Server、MySQL和Oracle这三种常见关系型数据库在分页查询方面的区别与联系。我们将提供具体场景下的SQL语句示例,并解释每个数据库的分页查询用法以及优化方法,帮助读者更好地选择适合自…

Apache JMeter

下载 Apache JMeter 并安装 java链接 打开 apache-jmeter-5.4.1\bin 找到jmeter.bat 双击打开 或者 ApacheJMeter.jar 双击打开 设置中文 找到 options 》choose Language 》chinese 新建 计划 创建线程组 添加Http请求 配置元件添加请求头参数(content-type&…

什么是PPS和TOD时序?授时防护设备是什么?

介绍 PPS和TOD PPS和TOD是两种用于精确时间同步的技术,它们在许多领域都有广泛的应用,总的来说,PPS和TOD被广泛应用于各种需要高度精确时间同步的领域,包括通信、测量、测试、系统集成和计算机网络等。 一、PPS PPS&#xff08…

RedisDesktopManager 连接redis

redis查看是否启动成功 ps -ef | grep redis以上未启动成功 cd /usr/local/bin/ 切换根目录 sudo -i 开启服务端 ./redis-server /usr/local/redis/redis.conf 开启客户端 ./redis-cli

Java【SpringBoot】SpringBoot 和 Spring 有什么区别? SpringBoot有哪些优点?

文章目录 前言一、Spring 特点二、SpringBoot 特点和优点总结 前言 各位读者好, 我是小陈, 这是我的个人主页, 希望我的专栏能够帮助到你: 📕 JavaSE基础: 基础语法, 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等 📗 Java数据结构: 顺序表, …

ElasticSearch学习2

1、索引的操作 1、创建索引 对ES的操作其实就是发送一个restful请求,kibana中在DevTools中进行ES操作 创建索引时需要注意ES的版本,不同版本的ES创建索引的语句略有差别,会导致失败 如下创建一个名为people的索引,settings&…

Java智慧工地系统源码(微服务+Java+Springcloud+Vue+MySQL)

智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三…

cdh6.3.2 Flink On Yarn taskmanager任务分配倾斜问题的解决办法

业务场景: Flink On Yarn任务启动 组件版本: CDH:6.3.2 Flink:1.13.2 Hadoop:3.0.0 问题描述: 在使用FLink on Yarn调度过程中,发现taskmanager总是分配在集中的几个节点上,集群…

记一次从Redis弱口令到RCE

Fscan扫描网段发现了一些开启了6379的服务器,逐个尝试了下未授权,然后尝试了下爆破 hydra爆破redis hydra -P [字典目录] redis://xxx.xxx.xxx.xxx结果还真让爆出来一个 得到密码后,连接上去,这里用的是Another Redis Desktop M…

飞机打方块(四)游戏结束

一、游戏结束显示 1.新建节点 1.新建gameover节点 2.绑定canvas 3.新建gameover容器 4.新建文本节点 2.游戏结束逻辑 Barrier.ts update(dt: number) {//将自身生命值取整let num Math.floor(this.num);//在Label上显示this.num_lb.string num.toString();//获取GameCo…

分布式 - 消息队列Kafka:Kafka 消费者消费位移的提交方式

文章目录 1. 自动提交消费位移2. 自动提交消费位移存在的问题?3. 手动提交消费位移1. 同步提交消费位移2. 异步提交消费位移3. 同步和异步组合提交消费位移4. 提交特定的消费位移5. 按分区提交消费位移 4. 消费者查找不到消费位移时怎么办?5. 如何从特定…

基于springboot+vue的食材商城(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…