STM32低功耗分析

1.ARM发布最新内核

2023 年5 月 29 日,Arm 公司今天发布了处理器核心:Cortex-X4、Cortex-A720 和Cortex-A520。这些核心都是基于 Arm v9.2 架构,只支持 64 位指令集,不再兼容 32 位应用。Arm 公司表示,这些核心在性能和效率方面都有显著的提升,同时也加强了安全性和可扩展性。
Cortex-X4 是 Arm 公司的旗舰核心,该核心比去年的 Cortex-X3 核心性能平均提高了 15%,同时在相同频率下降低了 40% 的功耗
在这里插入图片描述
ARM 公司内核为核心的处理凭借其高性能,低功耗的优点,被广泛应用到了各个领域,尤其是移动设备领域,如手机、平板、智能手表、POS机等。

2.低功耗应用

随着计算机技术和微电子技术的迅速发展,计算机系统应用领域越来越广泛。在一些特定场景下,低功耗计算机的应用显得尤为重要。如在智能手机、医疗设备和工业控制等领域。由于这些领域对设备的大小、重量和/或持久性有很高的要求,所以低功耗技术在这几个领域有着广泛的应用。
在这里插入图片描述
计算机低功耗应用主要有以下几种:
物联网设备:物联网设备需要长时间运行,因此需要使用低功耗计算机,以确保设备在运行过程中不会快速耗尽电力。
在这里插入图片描述
嵌入式系统:嵌入式系统是一种小型计算机系统,用于控制或监测特定设备或系统。这些系统需要长时间运行,因此需要使用低功耗计算机,以确保系统不会因电力耗尽而失效。
在这里插入图片描述
移动设备:移动设备如智能手机、平板电脑等需要长时间使用,因此需要使用低功耗计算机,以确保设备不会过热或快速耗尽电力。
在这里插入图片描述
云数据中心:云数据中心需要大量的计算机资源来支持大量的用户和应用程序。这些计算机需要长时间运行,因此需要使用低功耗计算机,以确保电力消耗得到有效控制。在这里插入图片描述
总而言之,低功耗计算机的应用越来越广泛,这些计算机采用了一系列创新技术来最大程度地降低功耗,同时还能够保证高性能的运行。这些技术的应用不仅有利于节能减排,还可以提高设备的性能和可靠性,推动计算机技术的不断发展。

3.如何降低功耗

处理器如何实现低功耗?关于这个问题,先不作答,先举一个生活中的例子来从侧面说明问题。

假设一个人住在房子里面(这个房子有1个主卧,3个次卧,1个客厅,1个厨房),假设房子里面的每个房间的灯都开着,请问如何做可以节省电?

在这里插入图片描述

答案很简单,可以把没人住的3个次卧房间的灯关掉,这样耗电量就降低了。

在这里插入图片描述

如果还希望继续省电,应该怎么做呢?是不是可以客厅和厨房的灯关掉,然后一个人睡到主卧?这样是不是耗电量有减少了?

在这里插入图片描述

如果还希望继续省电,应该怎么做呢?是不是可以把主卧的灯也关掉?这样就不耗电了?

在这里插入图片描述
所以在生活中想要省电,只需要把用不用的或者不重要的用电器关掉即可。

4.处理器低功耗原理

在生活中通过关掉用电器可以实现省电节能的目的,同样的道理处理器也可以通过这种方法实现降低功耗。一个处理器是由许多部件组成,一些组件的电源系统是独立的,可以通过关闭处理器内部的组件的电压,可以实现降低功耗
在这里插入图片描述
我们以STM32F1系列处理器为例,STM32的工作电压(VDD)为2.0~3.6V。通过内置的电压调节器提供所需的1.8V电源,当主电源VDD掉电后,通过VBAT脚为实时时钟(RTC)和备份寄存器提供电源,电源框图如下:
在这里插入图片描述
根据STM32电源框图不难发现,STM32 的电源系统可以分为3个部分:

1、VDDA供电区域。
2、VDD供电区域,该区域包含一个重要的1.8V供电区域。
3、后备供电区域。

在这里插入图片描述

4.1.VDDA供电区域

在这里插入图片描述
STM32处理器的 ADC电路模块配有独立的电源,这个电源就是VDDA电源,这种电路设计方便单独对ADC的电源滤波。VDDA供电区域使用 VDDA引脚输入,使用 VSSA作为独立的地连接,VREF引脚则为 ADC 提供测量使用的参考电压。

4.2.VDD供电区域

在这里插入图片描述
VDD供电域是 STM32处理器的电源系统中最主要的部分,其中调压器供电的电路是VDD供电域的核心。调压器为备份域及待机电路以外的所有数字申路供电,其中包括内核、数字外设(USART、TIMER、GPIO等)、 RAM以及FLASH。在这里插入图片描述
调压器的输出电压约为1.8V,因而使用调压器供电的这些电路区域被称为 1.8V 域。调压器可以运行在运行模式、停止模式以及待机模式

在运行模式下,1.8V 域全功率运行。

在停止模式下 1.8V 域运行在低功状态,1.8V
区域的所有时钟都被关闭,相应的外设都停止了工作,但它会保留内核寄存器以及SRAM的内容。

在待机模式下,整个 1.8V域都断电,该区域的内核寄存器及SRAM内容都会丢失。

4.3.后备供电区域

在这里插入图片描述
后备供电区域包括RTC、RTC BDCR寄存器、LSE振荡器和后备寄存器,后备供电区域由VBAT脚供电,使用电池或其他电源连接到VBAT脚上,当VDD断电时,可以保存备份寄存器的内容和维持RTC的功能。

5.STM32系列处理器的低功耗模式

在复位以后,微控制器处于运行状态。当微控制器不需继续运行时,可以利用多种低功耗模式来节省功耗。STM32F1系列处理器有三种低功耗模式

1、睡眠模式
2、停止模式
3、待机模式

这三种低功耗模式的功能框图如下:
在这里插入图片描述

5.1.睡眠模式

当Cortex-M3遇到WFE(等待中断)或者WFI(等待事件)指令时会停止内核时钟,停止程序执行。尽管Cortex-M3内核停止工作,但是处理器中的其他外设仍在继续工作。直到某个外设产生事件或者中断时,内核将会被唤醒,退出睡眠模式,程序继续运行(程序在进入睡眠时暂停,退出睡眠时继续运行)。在睡眠模式下,所有的I/O引脚都保持它们在运行模式时的状态。
在这里插入图片描述
睡眠模式下核停止工作,其他外设仍在继续工作,具体情况如下:
停止:crotex-m内核。
开启:RAM存储器、FLASH存储器、数字外设(USART、TIMER、GPIO等)、待机电路、电压调节器。
睡眠模式是三种低功耗模式中最高的!睡眠模式的功耗数据如下
在这里插入图片描述
进入睡眠模式

通过执行WFI或WFE指令进入睡眠状态。根据Cortex-M3系统控制寄存器中的SLEEPONEXIT位的值,有两种选项可用于选择睡眠模式进入机制:
SLEEP-NOW:如果SLEEPONEXIT位被清除,当WRI或WFE被执行时,微控制器立即进入睡眠模式。
SLEEP-ON-EXIT:如果SLEEPONEXIT位被置位,系统从最低优先级的中断处理程序中退出时,微控制器就立即进入睡眠模式。

退出睡眠模式

如果执行WFI指令进入睡眠模式,任意一个被嵌套向量中断控制器响应的外设中断都能将系统从睡眠模式唤醒。
如果执行WFE指令进入睡眠模式,则一旦发生唤醒事件时,微处理器都将从睡眠模式退出。 唤醒事件可以通过下述方式产生:
在外设控制寄存器中使能一个中断,而不是在NVIC(嵌套向量中断控制器)中使能,并且在Cortex-M3系统控制寄存器中使能SEVONPEND位。当MCU从WFE中唤醒后,外设的中断挂起位和外设的NVIC中断通道挂起位(在NVIC中断清除挂起寄存器中)必须被清除。
配置一个外部或内部的EXIT线为事件模式。当MCU从WFE中唤醒后,因为与事件线对应的挂起位未被设置,不必清除外设的中断挂起位或外设的NVIC中断通道挂起位。
该模式唤醒所需的时间最短,因为没有时间损失在中断的进入或退出上。

进入睡眠模式的代码如下

void main()
{
Init();
while(1)
{if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0){LED = 0;__WFI(); //*进入睡眠模式         LED = 1;}
}

当外设产生事件或者中断时,内核将会被唤醒退出睡眠模式

5.2.停止模式

停止模式是在Cortex™-M3的深睡眠模式基础上结合了外设的时钟控制机制,在停止模式下电压调节器可运行在正常或低功耗模式。此时在1.8V供电区域的的所有时钟都被停止,PLL、HSI和HSE RC振荡器的功能被禁止,SRAM和寄存器内容被保留下来。
进入停止模式时,停止内核时钟,停止程序执行。当一个中断或唤醒事件发生时,内核将被唤醒,退出停止模式,程序继续运行
在停止模式下,所有的I/O引脚都保持它们在运行模式时的状态。
在这里插入图片描述
停止模式下核停止工作,外设也停止工作,具体情况如下:
停止:crotex-m内核、数字外设(USART、TIMER、GPIO等)、FLASH存储器
开启:RAM存储器、待机电路、电压调节器。

停止模式是三种低功耗模式中排第二名!停止模式的功耗数据如下在这里插入图片描述
关于如何进入停止模式和如何退出停止模式,详见下表:
在这里插入图片描述
进入停止模式的代码如下

void main()
{
while(1)
{if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0){LED1 = 0;RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);LED1 = 1;}
}

5.3.待机模式

待机模式可实现系统的最低功耗。该模式是在Cortex-M3深睡眠模式时关闭电压调节器。整个1.8V供电区域被断电,PLL、HSI和HSE振荡器也被断电。SRAM和寄存器内容丢失。只有待机电路维持供电(备份电路可以由电池供电)。在待机模式下,所有的I/O引脚处于高阻态。
在这里插入图片描述
停止模式下除了待机电路,其他电路都停止工作,这些停止工作的电路包括:内核、数字外设、RAM存储器和FLASH存储器,除了具体情况如下:
停止:crotex-m内核、数字外设(USART、TIMER、GPIO等)、FLASH存储器、RAM存储器,电压调节器。
开启:待机电路。

待机模式的功耗是三种低功耗模式中最低的!待机模式的功耗数据如下
在这里插入图片描述
关于如何进入待机模式和如何退出待机模式,详见下表:
在这里插入图片描述
当一个外部复位(NRST引脚)、IWDG复位、WKUP引脚上的上升沿或RTC闹钟事件的上升沿发生时,微控制器从待机模式退出。从待机唤醒后,除了电源控制/状态寄存器(PWR_CSR),所有寄存器被复位。从待机模式唤醒后的代码执行等同于复位后的执行

进入待机模式的代码如下

void main()
{
Init();
while(1)
{if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0){LED = 0;RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);    			  PWR_WakeUpPinCmd(ENABLE);PWR_ClearFlag(PWR_FLAG_WU);PWR_EnterSTANDBYMode();LED = 1;}
}

6.深入研究

通过文章的前几节,可能大家已经对STM32低功耗有一定的了解,大部分的工程师也到了这个程度。在这里有以下两个问题:

1、停止模式下内核被关闭(停止工作),被唤醒后内核为什么可以继续运行程序?

2、待机模式下内核也是被关闭,为什么唤醒都不能继续运行程序?

问题1
停止模式下内核唤醒后为什么可以继续运行程序?关于这个问题查阅STM的官方手册。
在这里插入图片描述

从手册中可知虽然内核被停止,但是寄存器和SRAM存储器一直处于保存状态下,此时内核唤醒后,寄存器和SRAM存储器的数据和停止前一样,因此处理器可以从被中断的程序处继续运行。停止模式的电源框图如下:
在这里插入图片描述
问题2
关于待机唤醒后为什么不继续运行这个问题?继续查阅STM的官方手册。

在这里插入图片描述
手册中明确指出,在待机模式下1.8V区域断电(内核被断电),寄存器和SRAM里面的数据丢失,只有备份电路和待机唤醒电路处于供电状态下。待机模式的电源框图如下:在这里插入图片描述
进入待机模式时,寄存器和SRAM内的数据全部丢失,如果这个时候CORTEX-M内核强行运行,只会出现程序跑飞的严重情况。因此意法半导体将STM32处理器被设计成待机被唤醒后,等效于执行了一次复位操作,内核被复位,程序重新运行

创作不易希望朋友们点赞,转发,评论,关注!
您的点赞,转发,评论,关注将是我持续更新的动力!
CSDN:https://blog.csdn.net/li_man_man_man
今日头条:https://www.toutiao.com/article/7149576260891443724

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

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

相关文章

j解决Ubuntu无法安装pycairo和PyGObject

环境:虚拟机Ubuntu20.04,vscode无法安装pycairo和PyGObject 虚拟机Ubuntu20.04,vscode中运行Anaconda搭建的vens 的Python3.8.10 首先在vscode中点击ctrlshiftp,选择Python3.8.10的环境,自动激活Python 最近在搞无人…

使用 multiprocessing 多进程处理批量数据

示例代码 import multiprocessingdef process_data(data):# 这里是处理单个数据的过程return data * 2# 待处理的数据 data [1, 2, 3, 4, 5]def normal_func():# 普通处理方式result []for obj in data:result.append(process_data(obj)return resultdef parallel_func():# …

操作系统:四大特征(并发,共享,虚拟,异步)

1.并发 1.并发的定义 并发:指两个或多个事件在同一时间间隔内发生。 这些事件宏观上是同时发生的,但微观上是交替发生的。 值得注意的是,与并行(指两个或多个事件在同一时刻同时发生)区分开来。 2.操作系统的并发性 指计算机…

使用Vue + axios实现图片上传,轻松又简单

目录 一、Vue框架介绍 二、Axios 介绍 三、实现图片上传 四、Java接收前端图片 一、Vue框架介绍 Vue是一款流行的用于构建用户界面的开源JavaScript框架。它被设计用于简化Web应用程序的开发,特别是单页面应用程序。 Vue具有轻量级、灵活和易学的特点&#xf…

自适应迭代扩展卡尔曼滤波算法AIEKF估计SOC VS 扩展卡尔曼估计SOC

自适应迭代扩展卡尔曼滤波算法(AIEK) 自适应迭代扩展卡尔曼滤波算法(AIEK)是一种滤波算法,其目的是通过迭代过程来逐渐适应不同的状态和环境,从而优化滤波效果。 该算法的基本思路是在每一步迭代过程中&a…

AndroidStudio最下方显示不出来Terminal等插件

File->Settings->Plugins 然后在上面的输入框中输入Terminal,并将最右侧的对勾打上即可。 安装即可

Bootloader概述和Uboot

Bootloader 基本概念 什么是Bootloader? Bootloader是硬件启动的引导程序,是运行操作系统的前提;在操作系统内核或用户应用程序运行之前运行的一小段代码。对软硬件进行相应的初始化和设定,为最终运行操作系统准备好环境;在嵌入…

Linux中的软件管家——yum

目录 ​编辑 一,软件安装的方式 二,对yum的介绍 1.yum的作用 2,yum的库 三,yum下载软件的操作 1.yumlist 2.yuminstall 3.yumremove 四,yum源的转换 一,软件安装的方式 软件安装的方式大概分为三种…

解除百度安全验证

使用chrome浏览器用百度浏览时,一直弹百度安全验证: 在设置里进行重置: 然后重启浏览器就可以了。

vue+elementUI el-select 自定义搜索逻辑(filter-method)

下拉列表的默认搜索是搜索label显示label,我司要求输入id显示label名称 <el-form-item label"部门&#xff1a;"><el-select v-model"form.region1" placeholder"请选择部门" filterable clearable:filter-method"dataFilter&qu…

C# Emgu.CV+Tesseract实现识别图像验证码

效果图&#xff0c;简单的还行&#xff0c;复杂的。。。拉跨 懒得写讲解了&#xff0c;全部源码直接上吧 /// <summary>/// 验证码识别/// </summary>public partial class FrmCodeIdentify : FrmBase{private string _filePath;// 原图像Image<Bgr, byte> …

软路由的负载均衡设置:优化网络性能和带宽利用率

在现代网络环境中&#xff0c;提升网络性能和最大化带宽利用率至关重要。通过合理配置软路由IP的负载均衡设置&#xff0c;可以有效地实现这一目标&#xff0c;并提高整体稳定性与效果。本文将详细介绍如何进行软路由IP的负载均衡设置&#xff0c;从而优化网络表现、增加带宽利…

基于RabbitMQ的模拟消息队列之六——网络通信设计

自定义基于TCP的应用层通信协议。实现客户端对服务器的远程调用 编写服务器及客户端代码 文章目录 基于TCP的自定义应用层协议一、请求1.请求格式2.创建Request类 二、响应1.响应格式2.创建Response类 三、客户端-服务器交互四、type五、请求payload1.BasicAruguments(方法公共…

英国私校的艺术奖学金有哪些?申请要求和申请流程详解!

众所周知&#xff0c;英国私校不仅学术拔尖&#xff0c;在对学生艺术方面的培养也是毫不逊色的。几乎打开每一所英国私校的官网&#xff0c;都可以看到学校罗列的提供的各类课外艺术活动的精彩照片。      每个英国私校除了课后开设的五花八门的兴趣课外&#xff0c;还有各…

【c++】stringstream基础:实现数据类型转换和字符串分割

传统实现整型转换为字符串需要使用itoa或者sprintf&#xff0c;对于itoa和atoi的使用可以看文章&#xff1a; atoi和itoa极简无废话概述 但是用这两个函数进行转换时&#xff0c;所需要的空间事先不确定&#xff0c;所以可能造成程序崩溃&#xff0c;今天介绍的stringstream可…

数字 IC 设计职位经典笔/面试题(四)

共100道经典笔试、面试题目&#xff08;文末可全领&#xff09; 画出 CMOS 电路的晶体管级电路图,实现 YA*BC(DE).&#xff1f; 画出 YABC 的 CMOS 电路图&#xff0c;画出 YABCD 的 CMOS 电路图。 利用与非门和或非门实现 YABC(DE)((AB’)(CD)’(CE)’)’ 三个两输入与非门&a…

pc端字体为什么到12像素以后不生效

pc端字体为什么到12像素以后不生效&#xff1f; 因为谷歌浏览器默认的最小字体是12像素&#xff0c;如果去‘设置’里面修改最小字体&#xff0c;是可以达到修改效果的&#xff0c;但是&#xff0c;你不能解决用户的浏览器设置 解决办法如下 <p class"font">…

《C++设计模式》——结构型

前言 结构模式可以让我们把很多小的东西通过结构模式组合起来成为一个打的结构&#xff0c;但是又不影响各自的独立性&#xff0c;尽可能减少各组件之间的耦合。 Adapter Class/Object(适配器&#xff09; Bridge(桥接&#xff09; Composite(组合) Decorator(装饰) 动态…

【AI】《动手学-深度学习-PyTorch版》笔记(二十二):单发多框检测(SSD)

AI学习目录汇总 1、介绍 SSD(Single Shot MultiBox Detector)单发多框检测。“Single shot”说明SSD算法属于one-stage(一段式)方法,“MultiBox”说明SSD是多框预测(多尺度锚框/特征图)。 SSD和YOLO一样都是采用CNN网络执行one-stage(一段式)检测,区别是: YOLO速…

【面试心得】系统调用

这个问题也是在九识面试的时候被问到的&#xff0c;当时我说就是像Shell&#xff0c;从用户态转移到内核态的过程&#xff0c;面试官让我说的详细一点&#xff0c;我就说不出来了&#xff0c;然后我就说了一些函数调用的过程&#xff0c;hhhh。 现在在这里做一个记录吧。 本文…