STM32低功耗分析

在这里插入图片描述

答案很简单,可以把没人住的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存储器,电压调节器。
开启:待机电路。

待机模式的功耗是三种低功耗模式中最低的!待机模式的功耗数据如下
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数嵌入式工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!

img

img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

如果你觉得这些内容对你有帮助,可以+V:Vip1104z获取!!! (备注:嵌入式)

img

最后

资料整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断,步步高升!!!

更多资料点击此处获qu!!

  • 16
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1设计要求 要求系统按如下方式进入和退出睡眠模式: 在系统启动2秒后,将RTC在3秒钟之后配置为产生一个报警事件,接着通过WFI指令使系统进入停机模式。 如果要唤醒系统到正常模式,可通过按Key按钮;否则,在3秒钟后,会产生RTC报警中断自动将系统唤醒。 一旦退出停机模式,系统时钟被配置成先前的状态(在停机模式下,外部高速振荡器HSE和PLL是不可用的)。 经过一段延时之后,系统将再次进入停机状态,并可按上述操作无限重复。 2 硬件电路设计 硬件电路采用与7.1小节应用实例一样硬件电路,可见图7-10。其中Key按钮用于通过PB9产生一个外部中断, LED1、LED2、LED3、LED4则用于显示处理器所处的模式和中断触发情况。 3 软件程序设计 根据任务要求,程序内容主要包括: (1) 配置GPIOB口,配置RTC,配置外部中断; (2) 配置PB口第9个引脚作为外部中断,下降延触发;配置RTC报警中断,上升沿触发; (3) 两个中断服务子程序的内容分别是:切换LED2和LED3灯的状态; 整个工程包含3个源文件:STM32F10x.s、stm32f10x_it.c和main.c,其中STM32F10x.s为启动代码,所有中断 服务子程序均在stm32f10x_it.c中,其它函数则在main.c中。下面分别介绍相关的函数,具体程序清单见参考程序。 函数SYSCLKConfig_STOP用于当处理器从停机模式唤醒之后,配置系统时钟、使能HSE和PLL,并以PLL作为系统时钟源。当处理器处理停机模式的时候,HSE、PLL是不可用的。 函数GPIO_Configuration用于配置GPIO的PC6、PC7、PC8、PC9和PB9。 函数EXTI_Configuration用于配置外部中断线9(PB9)和17(RTC报警)。 函数NVIC_Configuration配置NVIC及中断向量表,这里主要是配置外部中断线9和17。 函数EXTI9_5_IRQHandler处理按钮Key(PB9)所触发的中断,其主要作用是将LED2灯的状态翻转一次。 函数RTCAlarm_IRQHandler处理RTC报警所触发的中断,其主要作用事将LED3 灯的状态翻转一次,如果设置了唤醒标志则清除之。 运行过程: (1) 使用Keil uVision3 通过ULINK 2仿真器连接EduKit-M3实验平台,打开实验例程目录PWR_TEST子目录下的PWR.Uv2 例程,编译链接工程; (2) 选择软件调试模式,点击MDK 的Debug菜单,选择Start/Stop Debug Session项或Ctrl+F5键,在逻 辑分析仪中添加GPIOC_ODR.6、GPIOC_ODR.7、GPIOC_ODR.8、GPIOC_ODR.9,点击Run按钮即可在逻辑分析 仪中看到如图7-14,还可用Peripherals-General Port-GPIOB来模拟KEY按钮的动作; (3) 选择硬件调试模式,选择Start/Stop Debug Session项或Ctrl+F5键,下载程序并运行,观察LED灯 的变化情况。注意,当目标系统进入停机模式之后,将无法使用仿真器进行调试了; (4) 退出Debug模式,打开Flash菜单>Download,将程序下载到EduKit-M3实验平台的Flash中,按RESET键复位,观察 LED灯的情况,正常情况应为:系统处于运行模式时LED1亮、LED4灭;系统处于停机状态时LED1灭、LED4亮; 当按下KEY按钮时LED2灯状态发生反转;当发生RTC报警时LED3状态发生反转。
### 回答1: stm32f103是一类非常常见的嵌入式系统开发板,其中的程序是用户制定的一项能够让系统进入工作模式的相关程序,下面我们来了解一下它的相关特点和设计思路。 首先,程序的设计目的是尽可能地降系统的,使其处于待机状态时仍能正常运行。在实现程序之前,需要对系统的进行详细的分析和测试,确定系统中哪些部分需要采取措施,如定时器、串口、IO口等,以及哪些部分不适合采取措施。同时需要针对不同的模式进行相应的程序设计和配置,如停止模式、休眠模式、备份模式等。 其次,为了让系统在状态下能够正常唤醒和运行,需要利用STM32内部的唤醒源,如外部中断、定时器中断等,对唤醒时钟进行设置,使得系统能够在唤醒时正常运行。此外,还需要对相关的外设进行电源管理,如关闭不必要的外设电源、降实际工作时钟等,进一步降系统的。 最后,程序的实现需要考虑到系统运行效率和代码优化,尽可能地减少方案带来的附加开销和延迟,同时要保证系统运行时的实时性和稳定性。为此,需要采用一些专门的开发工具和技巧,如优化编译选项、代码深度优化等。 综上所述,STM32F103的程序开发需要深入了解系统的工作原理和性能特点,针对系统特点进行设计和优化,充分利用系统资源,以达到最优的优化效果。 ### 回答2: STM32F103是ST公司推出的基于ARM Cortex-M3内核的微控制器,拥有丰富的外设和强大的性能,同时使用起来也非常简单方便。在进行程序设计时,我们可以采用以下策略来降: 1. 系统时钟降频:降系统时钟频率可以显著减少,同时也可以延长电池寿命。 2. 去除闹钟:将闹钟模块关闭可以省去一部分,特别是在RTC模式下使用电池供电的情况下。 3. 禁用外设模块:在不需要使用外设模块的情况下,尽可能地关闭这些模块,如CAN、SPI、I2C等。 4. 关闭浮空输入口:在外部输入口没有接上信号源的情况下,关闭这些输入口可以减少。 5. 使用Sleep模式:STM32F103支持多种休眠模式。睡眠模式是一种相对简单且常用的模式,它可以在唤醒时快速恢复正常运行。 6. 使用Wait模式:在进入Sleep模式前,先将系统时钟降频并关闭不必要的外设模块,然后使用Wait模式降。 在程序设计中,我们需要考虑到系统的稳定性、响应速度、硬件价格和等因素。通过合理的运用上述策略,可以有效地减少系统,提升系统性能和使用寿命。 ### 回答3: STM32F103是一款高性能微控制器,它拥有多种省电模式,可在电池供电下工作,广泛应用于智能终端、消费电子、工业设备和家用电器等领域。下面是STM32F103程序的几点关注: 1. 选择合适的省电模式。STM32F103可以进入多种省电模式,包括休眠模式、停止模式、待机模式和运行模式等。不同的模式下和恢复时间也不同,需要根据具体应用场景选择最适合的省电模式。 2. 关闭无用模块。在进入省电模式前,需要关闭一些无用的模块,如外设、闹钟等。这样可以有效地降。 3. 优化代码结构。优化程序结构和算法可以减少程序的执行时间,从而降。同时,只使用必要的外设也可以减少。 4. 使用定时器。使用定时器可以在时间到达设定值时自动唤醒处理器,从而减少因等待时间而导致的浪费。 5. 使用RTC实时时钟。RTC实时时钟可以在系统进入省电模式后保持微处理器时钟和日历计数器的计数。当需要唤醒系统时,RTC可以从闹钟中断触发唤醒。这种方式可以极大降系统。 总之,STM32F103的程序需要综合考虑各种因素,从各个方面进行优化,以实现最小化的目标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值