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

猜你喜欢

转载自blog.csdn.net/li_man_man_man/article/details/132795300