【STM32CubeMX】低功耗模式

news2025/1/19 23:15:15

前言

  本文讲解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.coloradmin.cn/o/895870.html

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

相关文章

双环传动CIO吴学信:数字化转型为企业高效运转和业绩腾飞提供重要支撑

引言 浙江双环传动机械股份有限公司(股票代码:002472)创建40年来专注于机械传动核心部件——齿轮及其组件的研发、制造与销售,已成为全球最大的专业齿轮产品制造商和服务商之一。 2019年以来,双环传动与纷享销客CRM建…

【0Ω电阻在PCB板中的5大常见作用】

文章目录 前言1、充当跳线2、进行调试时的前后级隔离3、让调试更灵活4、方便测试电流5、用于单点接地 前言 在PCB板中,时常见到一些阻值为0Ω的电阻。我们都知道,在电路中,电阻的作用是阻碍电流,而0Ω电阻显然失去了这个作用。那…

LC-将有序数组转换为二叉搜索树

LC-将有序数组转换为二叉搜索树 链接:https://leetcode.cn/problems/convert-sorted-array-to-binary-search-tree/description/ 描述: 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索…

new String()到底创建了几个对象

题目: new String("abc")会创建几个对象? 看字节码,就知道是两个。

经验分享丨HR告诉你:同样是找工作,这些简历绝对会被直接刷掉!

上次的文章分享了自己软件测试面试时的一些经历,今天我想分享一下自己当时写简历以及投简历方面的经历,本文内容纯粹是个人简单分享,如果有写得不好的地方还请读者包涵与指正。 我是去年的九月初开始投递简历的,貌似各行各业的人都…

[JavaWeb]【七】web后端开发-MYSQL

前言:MySQL是一种流行的关系型数据库管理系统,它的作用是存储和管理数据。在Web开发中,MySQL是必备的数据库技能之一,因为它可以帮助Web开发人员处理大量的数据,并且提供了强大的数据查询和管理功能。 一 数据库介绍 1.1 什么是数据库 1.2 数据库产品 二 MySQL概述…

电煎锅出口欧洲CE认证标准

电煎锅是家庭烹饪中比较常见的电器,一般家庭在日常生活中都会使用,所以电煎锅具有广大的市场,尤其在欧洲市场更是日常烹饪离不开的家庭电器。欧洲是我国出口比例占比较大的地区,每年出口到欧洲的家庭电器占很大一部分。而根据欧盟…

3 Python的数据类型

概述 在上一节,我们介绍了Python的基础语法,包括:编码格式、标识符、关键字、注释、多行、空行、缩进、引号、输入输出、import、运算符、条件控制、循环等内容。Python是一种动态类型的编程语言,这意味着当你创建一个变量时&…

解决c/c++ Error: redefinition of ‘xxx’ 的问题

错误信息 两个类/文件同时引用定义ReplyInfo的头文件,会造成头文件中定义重复定义 如两个类/文件重复引用massage文件报错 message.h:36:16: error: redefinition of struct MSG_SERVOCTRL message.h:40:2: error: conflicting types for servoctrl解决 一般是目…

[SWPUCTF 2022 新生赛]ez_ez_php

这段代码是一个简单的PHP文件处理脚本。让我们逐行进行分析: error_reporting(0); - 这行代码设置了错误报告的级别为0,意味着不显示任何错误。 if (isset($_GET[file])) { - 这行代码检查是否存在一个名为"file"的GET参数。 if ( substr($_…

步步为赢:打造一个酷炫而吸引人的Hadoop HDFS分布式文件系统集群部署方案

文章目录 版权声明一 分布式存储缘起二 分布式的基础架构2.1 大数据架构模式2.2 主从模式 三 HDFS的基础架构HDFS的角色组成 四 HDFS集群环境部署4.1 安装包下载4.2 Hadoop安装包目录结构4.3 修改配置文件,应用自定义设置4.4 分发Hadoop文件夹4.5 配置环境变量4.6 授…

【论文笔记】基于指令回译的语言模型自对齐-MetaAI

MetaAI最近发布的Humpback,论文链接:https://arxiv.org/abs/2308.06259 解决什么问题? 大量高质量的指令微调数据集的生成。 思路 在这项工作中,我们通过开发迭代自训练算法来利用大量未标记的数据来创建高质量的指令调优数据集…

IC流程中 DFT 学习笔记(2)

引言 DFT是ASIC芯片设计流程中不可或缺的环节。其主要目的是在芯片前端设计验证完成后插入一些诸如寄存器链等可供测试的逻辑,算是IC后端设计的范畴,属于结构测试而非功能测试。主要是在ASIC芯片流片完成后,通过这些已插入的逻辑&#xff0c…

Rancher-RKE-install 部署k8s集群

一、为什么用Rancher-RKE-install 1.CNCF认证的k8s安装程序。 2.有中文文档。 二、安装步骤 1.下载Rancher-Rke的二进制包-下面是项目的地址 GitHub - rancher/rke: Rancher Kubernetes Engine (RKE), an extremely simple, lightning fast Kubernetes distrib…

javaScript:还有人不会js中的Math方法?

目录 一.前言 二.Math方法 1.Math.floor()向下取整(重点) 示例 注意 2.Math.ceil()向上取整 示例 3.Math.round() 四舍五入 示例 4.Math.random()随机数(重点) 范围 示例 m-n之间的随机整数数(重点) 示例 输出10个[2…

时序结构重要性加权图卷积网络用于时序知识图谱补全

目录 摘要部分 四元数 时间戳 时间信息对四元数的影响 知识图谱里的结构信息 时序注意模块 重要性加权的图卷积网络 引言部分 现有方法的不足 本文主要贡献 准备工作 问题定义 大部分方法的缺陷 本文方法 框架 时序注意模块 实体分类 带有注意力机制的双向长短…

Spring-MVC的数据响应-19

在访问服务端MVC的时候,这个controller层进行相应操作之后 他要做两件事:页面跳转和返回字符串,在做完这些操作之后,我们一般进行页面展示:排除页面展示之外,有些需求可能直接回写给我们一些数据: 页面跳…

实验一 Hbase的安装部署与基本操作

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

gcc语法解析如何解决dangling else的问题?

GCC上古版本(3.4)还有yacc,学习GCC如何实现if else 嵌套的问题。即: 问题 else后面的if到底是else if语义 if (xxx)a1 else if (xxx) a2还是 else (语法块中的if else)。 if (xxx)a1 else if (xxx) a 2 else a2;PostgreSQL的…

Codeforces Round 881 Div.3

文章目录 贪心:A. Sasha and Array Coloring结论:B. Long Long性质:C. Sum in Binary Treedfs求叶子数量:D. Apple Tree二分与前缀和:E. Tracking Segments 贪心:A. Sasha and Array Coloring Problem - A…