低功耗

news2025/6/27 1:08:26

低功耗

目录

低功耗

STM32中的电源系统

STM32 中的低功耗

相关代码


-- 首先我们先看我们做的项目如何降低功耗

-- 对于设备,功耗怎么降低?把设备上所有的电子模块,都进入低功耗模式。

对于空气质量检测仪,如何降低功耗:

  • 1、 屏幕可以息屏
  • 2、 DHT11采集数据之后,就进入休眠模式
  • 3、 Kqm6600有一个引脚,可以让模块进入休眠模式
  • 4、 Suo3t长时间无操作,自动进入休眠模式
  • 5、 单片机
    (STM32L系列—>专门用于低功耗的系列),那么为什么我们不用L系列,而用F系列呢?因为低功耗系列就会导致性能和功能有所降低。

那么F系列的单片机如何降低功耗?

  • 1、降低CPU的主频 -- 可能会导致程序运行速度变慢

alt text

可以更改CPU的主频,目前是最高的72MHz,可以降低到最高48MHz,甚至更低,但是降低主频的同时,功耗也会降低,整个程序的运行速度会变慢,可能会导致一些问题。

  • 2、将不必要的片上外设,关闭,以及对应的时钟也关闭
  • 3、设备可以设置低功耗模式,

-- 注:但是降低功耗的同时会导致性能及功能的降低,所以要在保证功能的基础上降低功耗。


-- 模块低功耗,我们已经知道了,接下来就说一下单片机自身如何实现低功耗

STM32中的电源系统

-- 首先我们应该了解单片机内部的电源

alt text

alt text

ADC 电源及参考电压(VDDA供电区域)。为了提高转换精度, STM32 的 ADC 配有独立的电源接口,方便进行单独的滤波。ADC 的工作电源使用 VDDA引脚输入,使用 VSSA作为独立的地连接, VREF引脚则为 ADC 提供测量使用的参考电压。

调压器供电电路(VDD/1.8V 供电区域)。在 STM32 的电源系统中调压器供电的电路是最主要的部分,调压器为备份域及待机电路以外的所有数字电路供电,其中包括内核、数字外设以及 RAM,调压器的输出电压约为 1.8V,因而使用调压器供电的这些电路区域被称为 1.8V 域。调压器可以运行在“运行模式”、“停止模式”以及“待机模式”。在运行模式下, 1.8V 域全功率运行;在停止模式下 1.8V 域运行在低功耗状态, 1.8V 区域的所有时钟都被关闭,相应的外设都停止了工作,但它会保留内核寄存器以及SRAM 的内容;在待机模式下,整个 1.8V 域都断电,该区域的内核寄存器及SRAM 内容都会丢失(备份区域的寄存器不受影响)。

备份域电路(后备供电区域)。STM32 的 LSE 振荡器、 RTC 及备份寄存器这些器件被包含进备份域电路中,这部分的电路可以通过 STM32 的 VBAT 引脚获取供电电源,在实际应用中一般会使用 3V 的钮扣电池对该引脚供电.

alt text

STM32 中的低功耗

按功耗由高到低排列, STM32 具有运行、睡眠、停止和待机四种工作模式。上电复位后 STM32 处于运行 状态时,当内核不需要继续运行,就可以选择进入后面的三种低功耗模式降低功耗,这三种模式中,电源消耗不 同、唤醒时间不同、唤醒源不同,用户需要根据应用需求,选择最佳的低功耗模式。

-- 由此可以看出,单片机的低功耗主要是睡眠,停止,待机三种模式,那么他们的区别是什么呢?

alt text

-- 什么叫做单片机指令,如何区分是单片机的指令,前面有两个“__“的指令就是单片机指令,例如

alt text

-- 1、睡眠模式

在睡眠模式中,仅关闭了内核时钟,内核停止运行,但其片上外设, CM3 核心的外设全都还照常运行。
有两种方式进入睡眠模式,它的进入方式决定了从睡眠唤醒的方式,分别是 WFI(wait for interrupt)和 WFE(wait for event),即由等待“中断”唤醒和由“事件”唤醒。 

alt text

-- 2、停止模式

在停止模式中,进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.8V 区域的部分 电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新开启时钟后,还可以从上次 停止处继续执行代码。停止模式可以由任意一个外部中断(EXTI)唤醒,在停止模式中可以选择电压调节器为开模 式或低功耗模式。 

alt text

-- 3、待机模式

待机模式,它除了关闭所有的时钟,还把 1.8V 区域的电源也完全关闭了,也就是说,从待机模式唤醒后, 由于没有之前代码的运行记录,只能对芯片复位,重新检测 boot 条件,从头开始执行程序。它有四种唤醒方式, 分别是 WKUP(PA0)引脚的上升沿, RTC 闹钟事件, NRST 引脚的复位和 IWDG(独立看门狗)复位。 

alt text

相关代码

-- 可以参考官方代码

-- 1、睡眠模式

  • 我们了解到进入各种低功耗模式时都需要调用 WFI 或 WFE 命令,它们实质上都是内核指令,在库文件 core_cm3.h 中把这些指令封装成了函数,

alt text

 

alt text

!!!注:开exti中断(唤醒的条件),把其他中断关了(以防影响实验结果),串口中断只要不发数据不会触发(所以可以开着)


    usart_init();
	exti_init();


	//睡眠模式
	printf("进入睡眠模式AAAA\r\n");
	__WFI();//进入睡眠模式	//执行的结果应该是不会执行以下代码,直到有中断唤醒
	printf("进入睡眠模式BBBB\r\n");

-- 效果图 

alt text

-- 2、停止模式

  • 直接调用 WFI 和 WFE 指令可以进入睡眠模式,而进入停止模式则还需要在调用指令前设置一些寄存器位, STM32 标准库把这部分的操作封装到 PWR_EnterSTOPMode 函数中了。 

    alt text

这个函数有两个输入参数,分别用于控制调压器的模式及选择使用 WFI 或 WFE 停止,代码中先是根据调 压器的模式配置 PWR_CR 寄存器,再把内核寄存器的 SLEEPDEEP 位置 1,这样再调用 WFI 或 WFE 命令时, STM32 就不是睡眠,而是进入停止模式了。函数结尾处的语句用于复位 SLEEPDEEP 位的状态,由于它是在 WFI 及 WFE 指令之后的,所以这部分代码是在 STM32 被唤醒的时候才会执行。
要注意的是进入停止模式后, STM32 的所有 I/O 都保持在停止前的状态,而当它被唤醒时, STM32 使用 HSI 作为系统时钟(8MHz)运行,由于系统时钟会影响很多外设的工作状态,所以一般我们在唤醒后会重新开启 HSE,把系统时钟设置回原来的状态。

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	usart_init();
	exti_init();
	key_init();

    printf("ABC %d %s\r\n", 20, "CBA");
    printf("ABC %d %s\r\n", 20, "CBA");
    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
    SystemInit();//必须要加
    
    
    printf("ABC %d %s\r\n", 20, "CBA");
    printf("ABC %d %s\r\n", 20, "CBA");
    printf("ABC %d %s\r\n", 20, "CBA");

-- 3、待机模式

  • 类似地, STM32 标准库也提供了控制进入待机模式的函数:PWR_EnterSTANDBYMode

alt text

该函数中先配置了 PDDS 寄存器位及 SLEEPDEEP 寄存器位,接着调用__force_stores 函数确保存储操作完 毕后再调用 WFI 指令,从而进入待机模式。这里值得注意的是,待机模式也可以使用 WFE 指令进入的,如果 您有需要可以自行修改。在进入待机模式后,除了被使能了的用于唤醒的 I/O,其余 I/O 都进入高阻态,而从待 机模式唤醒后,相当于复位 STM32 芯片,程序重新从头开始执行。

alt text




    void System_EnterStandby(void)
    {
        //进入待机模式先设置唤醒方式 --- WKUP
        PWR_ClearFlag(PWR_FLAG_WU);
        PWR_WakeUpPinCmd(ENABLE);		//使能唤醒引脚
        PWR_EnterSTANDBYMode();
    }

    main函数中
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	//pwm_init();
	//dht11_init();
	//SysTick_Config(72000);
	usart_init();

    SysTick_Config(72000);
	printf("ABC %d %s\r\n", 20, "CBA");
	printf("ABC %d %s\r\n", 20, "CBA");
	System_EnterStandby();
	printf("ABC %d %s\r\n", 20, "CBA");
	printf("ABC %d %s\r\n", 20, "CBA");
	printf("ABC %d %s\r\n", 20, "CBA");
	//待机模式,重新唤醒后,类似于复位,就会从头执行,每次都打印两句话
	//再次点击下载程序时,就下载不进去了,因为进入待机模式了,什么都关了
	//首先按住板子的复位按键,然后点击下载,按大概0.5s,就可以了

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

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

相关文章

修改armbian DNS服务器地址(永久修改DNS配置)

linux dns服务器地址的配置文件在/etc/resolv.conf 但系统可能设置的是默认值,也就是192.168.1.1。导致系统无法正常解析域名,进而导致有一些接口无法调用或下载失败。 最直接的思路就是修改/etc/resolv.conf,将其中的nameserver修改为正确的…

必看系列:面试官通过一个问题考查了网络编程所有知识点!

一、写在开头 本文的主题是和大家一起探讨学习:“在浏览器中输入URL开始后,计算机所做的几件事”,这个问题是好几年前自己面试的时候,面试官考问过的,当时准备十分不充分,回答的一塌糊涂,今天拿出来再整理学习一遍,一同进步! 其实这个问题本身倒是不难,但它巧妙的是…

节假日提醒,节假日任务,节假日判断如何做?这篇文章教会你!

你是否有这样的需求,有一个任务需要在大家都休息的时候处理,你肯定会想到周六周日了,那不好意思,遇到调休怎么办呢?遇到国假怎么办呢?我这里所说的节假日和工作日不仅仅指正常的周一至周日,还包…

浙江省发规院产业发展研究所调研组莅临迪捷软件考察调研

2024年10月10日下午,浙江省发展与规划院产业发展研究所调研组一行莅临迪捷软件考察调研,绍兴市府办、区发改、区经信、迪荡街道等相关领导陪同。 调研组一行参观了迪捷软件的展厅与办公区,深入了解了迪捷软件的公司发展历程、运营状况、产品…

Python 如何使用 Bert 进行中文情感分析

前言 在自然语言处理(NLP)领域,情感分析是一个非常常见且重要的应用。情感分析通常用于识别文本中的情感,例如判断一条微博或评论是正面、负面还是中性。在过去的几年中,随着深度学习的发展,BERT&#xff…

MySQL表的基本操作和数据类型

MySQL表的基本操作和数据类型 表的操作创建表修改表删除表 数据类型数值类型整型浮点型 文本、二进制类型日期时间类型ENUM类型和SET类型 表的操作 创建表 语法: CREATE TABLE table_name(field1 datatype,field2 datatype,field3 datatype )character set 字符集…

Python的matplotlib可视化工具基本操作(数据分析生成图表)

一、安装导入 1、使用包管理器安装matplotlib pip3 install matplotlib 2、导入plt工具 import matplotlib.pyplot as plt 二、基本函数 1、创建图表 使用pyplot工具打点调用创建图表函数 例如创建直方图: import matplotlib.pyplot as plt import pandas…

【unity框架开发9】序列化字典,场景,vector,color,Quaternion

文章目录 前言一、可序列化字典类普通字典简单的使用可序列化字典简单的使用 二、序列化场景三、序列化vector四、序列化color五、序列化旋转Quaternion完结 前言 自定义序列化的主要原因: 可读性:使数据结构更清晰,便于理解和维护。优化 I…

Android Framework默认授予app通知使用权限

安卓通知使用权限 在安卓系统中,应用程序需要获取通知使用权限才能向用户发送通知。以下是关于安卓通知使用权限的一些信息: 权限获取方式 当用户安装应用时,系统可能会在安装过程中提示用户授予应用通知权限。用户可以选择允许或拒绝。 应…

记录一些yolo-world训练数据集的报错

参考的这个文章 https://blog.csdn.net/ITdaka/article/details/138863017?spm1001.2014.3001.5501 openai快捷下载:https://download.csdn.net/download/qq_43767886/89876720 然后我打算训练coco数据集,遇到了以下的问题 问题一 原因:…

智慧农田新篇章:高标准农田灌区信息化的创新实践

在新时代的农业发展蓝图中,智慧农田已成为推动农业现代化、实现可持续发展目标的关键一环。高标准农田灌区信息化作为智慧农业的重要组成部分,正引领着一场深刻的农业技术革命,它不仅关乎粮食安全与资源高效利用,还深刻影响着农村…

writehelpAI论文写作,专业毕业论文救星

撰写专业毕业论文是每位学生学术旅程中的一个重要里程碑,它不仅检验了你对专业知识的掌握程度,还考验着研究能力、批判性思维以及书面表达技巧。在这个过程中,writehelpAI这样的智能写作助手可以成为你的得力伙伴,帮助解决从选题到…

功率检测和语音功能

INA226 INA226 High-Side or Low-Side Measurement, Bi-Directional Current and Power Monitor with I2C Compatible Interface datasheet (Rev. A) INA226功率监测模块原理 7.5 编程 INA226 器件的一个重要方面是它不一定测量电流或功率。该器件可测量施加在 IN 和 IN- 输入…

数据结构重点学习笔记教程——入门必看 数据结构心得

数据结构教程知识点 章节目录 一、数据结构概述二、线性表三、栈与队列四、数组与字符串五、树与二叉树六、图七、排序算法八、查找算法九、哈希表与散列法十、高级数据结构 总结简介 本数据结构教程知识点涵盖了从数据结构概述到高级数据结构的全方位内容,旨在帮…

河南省学籍管理员在校拍照采集学生证件照流程介绍

校园证件照采集是校园管理中一个重要的环节,它涉及为学生、教职工等校园成员拍摄并处理符合特定要求的证件照片。以下是针对河南省中小学生学籍照片集中拍摄采集的步骤指南,用于指导学籍管理员开展相关工作。 一、学籍照片采集的前期准备 (1…

Java读取Excel文件_详细可执行_低内存占用

EasyExcel介绍:高效内存友好Java Excel处理工具,轻松应对大文件 EasyExcel是一个基于Java的、快速且简洁的Excel处理工具,专为解决大文件内存溢出问题设计。与传统的Excel处理框架如Apache POI和jxl相比,它显著降低了内存消耗。例…

linuxC高级_day5(完结)

目录 指针函数 1.概念 2.定义格式 3.函数内开辟空间 函数指针 1.概念 2.定义格式 2.1 格式 3.函数指针数组 3.1 概念 3.2 格式 3.3 赋值 条件编译 1.根据宏是否定义 根据宏值 3.防止头文件重复包含 指针函数 1.概念 本质是函数,函数返回值是指针。类…

C++系统教程004-数据类型(03)

一 .变量 变量是指在程序运行期间其值可以发生改变的量。每个变量都必须有一个名称作为唯一的标识,且具有一个特定的数据类型。变量使用之前,一定要先进行声明或定义。 1.变量的声明和定义 C中,变量声明是指为变量提供一个名称&#xff0c…

鸢尾花书实践和知识记录[6-23数据聚类]

文章目录 思维导图数据聚类和引例基于图论的聚类算法算法流程1构造数据构造距离矩阵相似度相似度矩阵创建图 拉普拉斯矩阵标准拉普拉斯矩阵(Combinatorial Laplacian)归一化拉普拉斯矩阵 (Normalized Laplacian)无标度拉普拉斯矩阵 (Signless Laplacian)归一化对称拉普拉斯矩阵…

这么好看的桌面时钟 怎么能不分享给大家

最近小编发现了非常好用的桌面时钟。桌面时钟顾名思义就是可以放在桌面上的时钟,这是一款界面优美,功能实用,易于操作的桌面时钟工具芝麻时钟(下载地址:https://clock.zhimasoft.cn/)。 1、首先来看下这些时钟的效果,…