当前位置: 首页 > news >正文

STM32-笔记43-低功耗

一、什么是低功耗?

        低功耗‌是指通过优化设计和采用特定的技术手段,降低电子设备在运行过程中消耗的能量,从而延长电池寿命、提高性能和减少发热。低功耗设计主要从芯片设计系统设计两个方面进行,旨在减少所有器件的功率损耗,从而降低总体功耗‌。

低功耗_百度百科

        STM32的低功耗(low power mode)特性是其嵌入式处理器系列的一个重要优势,特别适用于需要长时间 运行且功耗敏感的应用场景,如便携式设备、物联网设备、智能家居系统等。

        在很多应用场合中都对电子设备的功耗要求非常苛刻,如某些传感器信息采集设备,仅靠小型的电池提供电源,要求工作长达数年之久,且期间不需要任何维护;由于智慧穿戴设备的小型化要求,电池体积不能太大导致容量也比较小,所以也很有必要从控制功耗入手,提高设备的续行时间。

二、STM32电源系统结构

三、低功耗模式介绍

STM32具有运行、睡眠、停止和待机四种工作模式。

上电后默认是在运行模式,当内核不需要继续运行时,可以选择后面三种低功耗模式。

3.1 睡眠模式(sleep mode)

        在睡眠模式下,CPU停止工作,但所有外设(如ADC、通信接口等)仍然运行,时钟继续运转。这适用于需要暂时关闭CPU但外围设备需要继续工作的场景。

模式特点:

  • 对系统影响小,但是节能效果最差。
  • 在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。

进入条件:

  • 当系统控制寄存器中的SLEEPDEEP位被清除(通常为0),并且SLEEPONEXIT位根据需求设置时(如果设置为1,则在最低优先级中断处理程序退出时进入Sleep模式;如果为0,则执行WFI或WFE时立即进入)。
  • 执行WFI(Wait For Interrupt)或WFE(Wait For Event)指令来进入。

唤醒条件:

  • 任意一个中断都能将系统从Sleep模式唤醒。
  • 如果执行WFE指令进入Sleep模式,则一旦发生唤醒事件时,MCU将唤醒。

3.2 停机模式(stop mode)

        在停机模式下,CPU和核心外围设备的时钟会停止,但部分唤醒源(如外部中断和某些定时器)仍然运行。这适用于需要长时间等待外部事件唤醒的应用,如等待用户输入或外部信号。Stop模式实现了非常低的功耗,同时保留了SRAM和寄存器的内容。

模式特点

  • 节能效果好,程序不会复位。但恢复时间较长(比如震荡器需要重新起震等)。
  • 在停机模式下,所有的I/O引脚都保持它们在运行模式时的状态。
  • 退出停止模式,HSI RC振荡器被选为系统时钟

进入条件:

  • 需要将SLEEPDEEP位设置为1以进入深度睡眠模式,然后通过设置电源控制/状态寄存器(PWR_CSR)中的PDDS位为0来选择进入Stop模式。
  • 根据需求设置LPDS位(LPDS = 0:表示在深睡眠模式下,电压调节器保持开启状态;LPDS = 1:表示在深睡眠模式下,电压调节器进入低功耗模式。)。
  • 执行WFI(Wait For Interrupt)或WFE(Wait For Event)指令来进入。
  • 在进入Stop模式之前,通常需要关闭不必要的外设时钟,并保存需要保留的状态信息。

唤醒条件:

  • Stop模式可以通过外部中断(如按键中断、USART接收中断等)唤醒。
  • RTC闹钟事件、USB唤醒、以太网(ETH)唤醒等也可以作为唤醒源,但这些通常需要通过外部中断来触发。


3.3 待机模式(standby mode)


        在该模式下,CPU、外围设备和时钟都被关闭,只保留唤醒逻辑和备份寄存器。这适用于不需要保留RAM内容且可以从复位状态恢复的设备,常见于需要极低功耗且稀疏唤醒的应用。Standby模式是STM32中功耗最低的模式之一。

模式特点:

  • 节能效果最好,但程序会复位,只有少数条件唤醒。
  • 在Standby模式下,大部分IO引脚处于高阻态,只有复位引脚、TAMPER引脚(如果配置为防侵入或校准输出)和WKUP引脚可用作唤醒源。

进入条件:

  • Standby模式进入前,需要清除电源控制/状态寄存器(PWR_CSR)中的WUF位,以确保没有未处理的唤醒标志。
  • 将SLEEPDEEP位设置为1以进入深度睡眠模式,并设置PDDS位为1来选择进入Standby模式。
  • 执行WFI或WFE指令进入Standby模式。

唤醒条件:

  • Standby模式可以通过WKUP引脚的上升沿唤醒。
  • RTC闹钟事件也可以作为唤醒源。
  • 独立看门狗(IWDG)复位和NRST引脚上的外部复位也可以唤醒STM32,但这通常用于系统复位而非低功耗唤醒。

图片展示如下:

四、寄存器及库函数介绍

关于低功耗模式都集中在电源控制模块下

4.1 电源控制寄存器(PWR_CR)

4.2 电源控制/状态寄存器(PWR_CSR)

 

4.3 系统控制寄存器(SCB_SCR)

System control register (SCB_SCR)

4.4 库函数

    //使能电源时钟(关闭电压调节器)
    __HAL_RCC_PWR_CLK_ENABLE();
    //使能WKUP引脚唤醒功能
    HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
    //清除唤醒标记,否则会持续唤醒,无法进入待机模式
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);

五、低功耗实验

实验目的:

1. 按下按键 2 ,进入低功耗模式(睡眠、停机、待机);
2. 按下按键 1 ,退出低功耗模式;
3. 正常模式下, LED1 闪烁;
4.进入停机模式, LED2 长亮,退出停机模式,则 LED2 熄灭;
我们需要有一种方式,触发之后可以同时对三种低功耗模式进行唤醒,通过如下图可知
睡眠模式对任一中断都可以唤醒,停机模式对任一外部中断可以唤醒,待机模式对WKUP引脚产生上升沿可以唤醒。这里可以对WKUP引脚产生上升沿之后,设置中断处理函数,即可产生中断,并且WKUP引脚产生 的中断是一种外部中断。
复制项目文件19-串口打印功能
重命名为57-低功耗

打开项目

加载文件

5.1 睡眠模式:

在lpwr.c函数中

//睡眠模式
void lpwr_enter_sleep(void)
{
    HAL_SuspendTick();//使用WFI,必须关闭滴答定时器中断,否则会把整个程序唤醒
    HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);
}

在主函数中

uint8_t i=0;
    while(1)
    {
        if(key_scan() == 2)
        {
            lpwr_enter_sleep();
        }
        if(i%20 == 0)
            led1_Toggle();
        i++;
        delay_ms(10);
    }

测试睡眠模式时,会出现什么现象?

烧录代码之后led1以200ms的频率疯狂闪烁,此时摁下按键2,就会进入睡眠模式,led1可能会瞬间保持当前状态进入睡眠模式(可能是亮灯,也可能是灭灯状态),然后摁下按键1(WKUP引脚产生上升沿),就会通过中断退出睡眠模式,这时led1再次以200ms的状态疯狂闪烁。

在lpwr.c文件中HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);函数,查看库文件发现:

翻译是:

(电压)调节器:在睡眠模式下是不使用(电压)调节器的,但是为了保持一致这里要使用这个参数。

当使用WFI入口时,如果不希望滴答定时器中断唤醒源,则必须取消勾选滴答中断。

5.2 停机模式:

在lpwr.c函数中

void lpwr_enter_stop(void)
{
    //关闭滴答定时器
    HAL_SuspendTick();
    //点亮led2,使其知道进入了停机模式
    led2_ON();
    //直接进入停机模式
    HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON,PWR_SLEEPENTRY_WFI);
    //熄灭led2,使其知道退出了停机模式
    led2_OFF();
}

在主函数中

    uint8_t i=0;
    while(1)
    {
        if(key_scan() == 2)
        {
            lpwr_enter_stop();
        }
        if(i%20 == 0)
            led1_Toggle();
        i++;
        delay_ms(10);
    }

测试停机模式,会出现什么现象?

        烧录上面代码会发现led1以200ms的速度疯狂闪烁,此时摁下按键2,led1会立刻以当前状态进入停机模式(可能是亮灯,也可能是灭灯状态),并且led1常亮,当摁下按键1时,led1从常亮状态变成熄灭状态,led2会从以200ms的闪烁的状态变成慢速度闪烁。

为什么led2会从以200ms的闪烁的状态变成慢速度闪烁?为什么不是原速度闪烁?

        因为停机模式第三条:退出停止模式,HSI RC振荡器被选为系统时钟。在原来振荡器是以系统时钟的频率进行震荡(72MHZ),当进入停止模式之后,再退出一次停止模式,振荡器会选择HSI RC(8MHZ),所以led2灯闪烁的状态会下降,如果需要变回原来的频率,需要在退出停止模式之后,再次配置系统时钟为振荡器。代码如下:

5.3 待机模式:

在lpwr.c函数中

//待机模式
void lpwr_enter_standby(void)
{
    //使能电源时钟(关闭电压调节器)
    __HAL_RCC_PWR_CLK_ENABLE();
    //使能WKUP引脚唤醒功能
    HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
    //清除唤醒标记,否则会持续唤醒,无法进入待机模式
    __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
    //进入待机模式
    HAL_PWR_EnterSTANDBYMode();
    //测试:看看代码会不会运行到下面
    led2_ON();
}

在主函数中

while(1)
    {
        if(key_scan() == 2)
        {
            lpwr_enter_standby();
        }
        if(i%20 == 0)
            led1_Toggle();
        i++;
        delay_ms(10);
    }

测试待机模式时,会出现什么现象?

        烧录代码之后,led1会以200ms的频率疯狂闪烁,当摁下按键2时,led1会立刻以当前状态进入待机模式(可能是亮灯,也可能是灭灯状态),然后摁下按键1之后,led1再次以200ms的频率疯狂闪烁,并且,在此期间,led2没有亮。

led2为什么没有亮?

        退出一次待机模式之后,代码会从主函数重新执行,而不是继续执行,所以led2没有亮。

相关文章:

STM32-笔记43-低功耗

一、什么是低功耗? 低功耗‌是指通过优化设计和采用特定的技术手段,降低电子设备在运行过程中消耗的能量,从而延长电池寿命、提高性能和减少发热。低功耗设计主要从芯片设计和系统设计两个方面进行,旨在减少所有器件的功率损耗&am…...

Facebook 隐私风波:互联网时代数据安全警钟

在社交媒体飞速发展的今天,个人数据的隐私保护已成为全球关注的焦点。作为全球最大的社交平台之一,Facebook面临的隐私问题,尤其是数据泄露事件,频繁引发公众的广泛讨论。从用户信息被滥用到数据泄漏,Facebook的隐私挑…...

Java 中的 ZoneOffset

介绍 在我们的这个世界上因为地球是圆的,所以每个国家都会有自己特定的时区。 时区在我们对时间的使用上扮演了非常重要的角色。但又因为时区的存在,又给我们带来了很多的麻烦,比如北美地区使用的夏令时和中国统一使用东 8 区的时间等。 当…...

amis模板语法、数据映射与表达式

模板字符串 表达式中获取变量 可以支持在普通文本中&#xff0c;使用数据映射语法&#xff1a;${xxx} 获取数据域中变量的值 "Hello ${text}"渲染 html 使用数据映射语法&#xff1a;${xxx} 获取数据域中变量的值&#xff0c;并渲染 HTML "<h1>Hello<…...

频域增强通道注意力机制EFCAM模型详解及代码复现

背景与动机 在深度学习领域,如何有效处理时间序列数据一直是一个重要的研究方向。近年来, 频域分析技术 在时间序列处理中展现出了巨大潜力,特别是离散余弦变换(DCT)因其能够高效捕捉低频信息并避免高频噪声干扰而受到广泛关注。 FECAM模型的开发正是基于这一背景,旨在…...

GitLab 国际站中国大陆等地区停服,如何将数据快速迁移到云效

代码托管平台 GitLab 国际站&#xff08;GitLab.com&#xff09;近日发布公告&#xff0c;官宣即将停止对中国大陆、香港、澳门地区的用户账号提供服务&#xff0c;并提供 60 天过渡期自行迁移账户数据&#xff0c;超期未迁移的账号可能会被 GitLab 清除。这一重要决策引起了全…...

BPG图像库和实用程序(译)

1)快速介绍 编辑Makefile以更改编译选项&#xff08;默认编译选项对于Linux应该是OK的&#xff09;。输入make来编译&#xff0c;输入make install来安装编译后的二进制文件。bpgview&#xff1a;为了编译它&#xff0c;你需要安装SDL和SDL_image库。Emscripten的使用&#xff…...

简述1个业务过程:从客户端调用接口,再到调用中间件(nacos、redis、kafka、feign),数据库的过程

以下是一个常见的业务过程示例&#xff0c;展示了从客户端调用接口&#xff0c;再到调用中间件&#xff08;Nacos、Redis、Kafka、Feign&#xff09;和数据库的过程&#xff1a; 假设我们有一个电商系统&#xff0c;客户端要查询某个商品的详细信息&#xff0c;这个商品信息可…...

01.02、判定是否互为字符重排

01.02、[简单] 判定是否互为字符重排 1、题目描述 给定两个由小写字母组成的字符串 s1 和 s2&#xff0c;请编写一个程序&#xff0c;确定其中一个字符串的字符重新排列后&#xff0c;能否变成另一个字符串。 在这道题中&#xff0c;我们的任务是判断两个字符串 s1 和 s2 是…...

什么是.NET中的反射,它有哪些应用场景

反射是.NET框架提供的一种强大的机制&#xff0c;它允许程序在运行时查询和操作对象的类型信息。以下是对.NET中反射的详细解释及其应用场景&#xff1a; 一、反射的定义 在.NET中&#xff0c;所有类型的信息&#xff08;包括类、结构、委托、接口、枚举等以及它们的成员信息…...

Linux离线部署ELK

文章目录 前期准备开始安装安装elastic search安装logstash安装kibana 配置ELK配置ElasticSearch配置logstash配置kibana 启动ELK启动命令启动测试 设置ELK策略创建ILM策略将ILM策略与日志index关联查看索引是否被ILM策略管理 前期准备 ELK包含三部分软件 ElasticSearch用作搜…...

解决 chls.pro/ssl 无法进入问题

使用charles的xdm不知道有没有遇到这样的问题。手机上访问 chls.pro/ssl 就始终进不去了… 各种检查&#xff0c;ip地址、证书&#xff0c;ssl设置等等都正常&#xff0c;就是进不去。 在一位好心人的提醒下得到了一个解决办法。那就是换一个地址 最新地址是: charlesproxy…...

Rust 游戏开发框架指南

Rust 游戏开发框架指南 主流游戏引擎 1. Bevy 最受欢迎的 Rust 游戏引擎之一&#xff0c;基于 ECS&#xff08;实体组件系统&#xff09;架构。 特点&#xff1a; &#x1f680; 高性能 ECS 系统&#x1f4e6; 热重载支持&#x1f3a8; 现代渲染器&#x1f50a; 内置音频系…...

hadoop3.3和hive4.0安装——单节点

hadoop3.3x和hive4.0安装部署 为什么我要安装hive4.0&#xff0c;因为阿里云镜像只有hive4.0 软件相互兼容性版本 系统centos7 uname -a如果内核3.0以上可以用 安装jdk1.8以上的版本&#xff08;配置好环境变量&#xff09; hadoop3.3.x与hive4.0.x 创建目录 mkdir -p /us…...

centos安装golang

1.下载golang golang所有版本网址 https://studygolang.com/dl //下载并解压到/usr/local文件下 wget https://studygolang.com/dl/golang/go1.18.3.linux-amd64.tar.gz //解压并复制到/user/local文件夹下 tar -C /usr/local -zxf go1.18.3.linux-amd64.tar.gz 2.编辑环境变…...

博图 linucx vmware

电脑与 PLC 的连接 博图装在虚拟机里&#xff0c;PLC 通过网线与电脑连接 可以是使用网线直接连接&#xff0c;也可以中间接个路由器或交换机 问题在于虚拟机提供多种网络连接方式&#xff0c;但不是每种都可以与 PLC 建立连接 以 VMware 虚拟机为例&#xff0c;进入编辑/虚拟网…...

Service Work离线体验与性能优化

Service Work离线体验与性能优化 引言 先放个意外事件&#xff0c;万事开头难&#x1f923;&#x1f923;&#x1f923; 原计划是分享离线应用与数据资源缓存的应用实践&#xff0c;结果发现这一技术已被web标准废弃 曾经做过一个PC应用&#xff0c;业务需求要求应用具备容灾…...

Unity 语音转文字 Vosk 离线库

市场有很多语音库&#xff0c;这里介绍Vosk SDK 除了支持untiy外还有原生开发服务器等 目录 安装unity示例demo下载语音训练文件运行demo结尾一键三联 注意事项 有可能debug出来的文本是空的&#xff0c;&#xff08;确保麦克风正常&#xff0c;且索引正确&#xff09;分大…...

VSCode连接Github的重重困难及解决方案!

一、背景&#xff1a; 我首先在github创建了一个新的项目&#xff0c;并自动创建了readme文件其次在vscode创建项目并写了两个文件在我想将vscode的项目上传到对应的github上时&#xff0c;错误出现了 二、报错及解决方案&#xff1a; 1.解决方案&#xff1a; 需要在git上配置用…...

《AI赋能鸿蒙Next,打造极致沉浸感游戏》

在游戏开发领域&#xff0c;鸿蒙Next系统与人工智能技术的结合为开发者们带来了前所未有的机遇&#xff0c;使打造更具沉浸感的游戏成为可能。以下将深入探讨如何利用人工智能在鸿蒙Next上开发出令人身临其境的游戏。 利用AI优化游戏角色智能行为 在传统游戏中&#xff0c;非…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障

关键领域软件测试的"安全密码"&#xff1a;Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力&#xff0c;从金融交易到交通管控&#xff0c;这些关乎国计民生的关键领域…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...