STM32F103C8T6 MCU功耗测评指南

发布者:平安心境最新更新时间:2023-08-25 来源: elecfans关键字:STM32F103C8T6  MCU  功耗 手机看文章 扫描二维码
随时随地手机看文章

STM32F103C8T6 MCU越来越广泛的应用在生产生活的各个领域,外接丰富的传感器、功能模块、通信模块、显示存储等可以形成各种各样的产品项目应用。对于功耗要求比较高的产品,一般会选择STM32L系列的MCU,但是从功耗的评测角度,逻辑上是基本相似的。


在很多应用场合中都对电子设备的功耗要求非常苛刻,如某些传感器信息采集设备,仅靠小型的电池提供电源,要求工作长达数年之久,且期间不需要任何维护。由于智能穿戴设备的小型化要求,电池体积不能太大导致容量也比较小,所以也很有必要从控制功耗入手,提高设备的续航时间。其实,只要是涉及到便携式的产品,都免不了要使用电池作为电源,否则,如果还是需要接一个插头使用市电来供电的话,那就无法称之为便携式了,比如手机、运动手环、蓝牙耳机智能手表等都是类似的。所以控制功耗和提高产品的续航时间就显得尤为重要


目前针对STM32F103C8T6等系列单片机而言,比较常用的低功耗模式是停止模式和待机模式。


当使用待机模式时,在实际应用中,通常会有一个开关机的按键(PA0),如果用户按下按键的话,就会开机或者关机,开机对应的就是唤醒,而关机对应的就是待机(类似于手机的开关机按键)。在此过程中,电池会一直给单片机的3.3V电源供电,也就是说,单片机一直都是有电的,但是它的所有外设以及时钟都处于关闭状态,之所以还要给单片机供电,只是为了在用户按下按键时检测PA0的上升沿而已,如果不给单片机供电的话,那么还怎么检测呢?检测不了。


当使用停止模式时,我们先看一个问题:理论上待机模式的功耗远比停止模式要低,为什么还要选择停止模式呢?通常是这样的,一个便携式的系统,除了考虑按键开关机外,还需要考虑给电池充电的时候往往需要显示一些充电的信息(现在的手机充电就是这样的),如果是在开机状态下充电的话完全没有问题。但是,如果是在关机状态下充电呢?肯定就需要单片机能够自己唤醒自己(不需要用户按下PA0),然后才有可能显示充电的信息(比如手机关机状态下接通电源后,可以自动显示充电的动画)。


是否可以实现不按下PA0就实现唤醒功能吗?当然可以,只需要在硬件上做一些改动即可。


比如,将充电口的电压降压后跟PA0相连,这样只要充电口在充电,PA0必定会出现一个从低到高的脉冲,这样就可以唤醒了。但这种情况下,软件层面上又不好区分PA0的上升沿是由于充电造成的,还是由于用户按下按键造成的。所以,这个时候就需要考虑选择停止模式了,开关机按键接到一个引脚,充电口接到另外一个引脚,两个引脚都配置为外部中断,两个引脚也都可以唤醒单片机,分开了不同的信号电平,这样子,在软件上就可以很容易地判断。


实际上也有另一种改进方式,就是在硬件上实现一个脉冲电路,可以用一个简单的RC延时电路,就是说充电口的电平再经过一个RC电路以后,出来的就不会一直是高电平,而只是一个脉冲了,再把这个脉冲信号接到PA0引脚,这个时候插入充电口和按下PA0就都会在PA0上出现一个脉冲了。软件上,可以利用长按开机,再长按关机的机制来进行判别,如果PA0仅仅只是出现一个上升沿并且检测到充电芯片正在充电,此时就是充电口插入了,唤醒单片机且显示充电效果即可。


工作模式

我们先了解一下STM32F103C8T6单片机的几种工作模式。按功耗从高到低排列,STM32F103C8T6具有运行(Run)、睡眠(Sleep)、停止(Stop)和待机(Standby)四种工作模式。在这四种模式下,后面三种是当STM32F103C8T6的内核不在需要运行时,可以选择的几种模式,当单片机在工作时,则是运行模式。


运行模式

这里我们不多说运行模式,因为当STM32F103C8T6在上电复位后,即处于了运行模式,这种情况下,单片机自动运行程序。只由当我们不需要内核也就是所谓的Cortex-M3继续运行时,我们就可以选择让芯片进入睡眠、停止和待机这三种模式,来让芯片降低功耗。功耗的降低会减少芯片的发热以及能够保证可靠性增加。


睡眠模式

当STM32F103C8T6在运行过程中,内核也就是所谓的Cortex-M3遇到WFE(等待中断)或者WFI(等待事件)指令时会停止内部时钟,停止程序执行。尽管Cortex-M3停止工作,但是其外设仍在继续工作,直到某个外设产生事件或者中断时,内核将会被唤醒,退出睡眠模式。在睡眠模式中,仅关闭了内核时钟,内核停止运行,但其片上外设,Cortex-M3核心的外设全都还照常运行,在软件上表现为不再执行新的代码。这个状态会保留睡眠前的内核寄存器、内存的数据。唤醒后 ,若由中断唤醒,先进入中断,退出中断服务程序后,接着执行 WFI指令后的程序;若由事件唤醒,直接接着执行 WFE后的程序。基本上无唤醒延迟。

pYYBAGQC_HqAVQg3AAC46n9VERc218.png


poYBAGQC_ICAdrfWAADGTvrDXUQ342.png

这里补充说明一件事:Cortex-M3是一个32位的内核,在传统的单片机领域中,有一些不同于通用32位CPU应用的要求。在工控领域,用户要求具有更快的中断速度,Cortex-M3采用了Tail-Chaining中断技术,完全基于硬件进行中断处理,最多可减少12个时钟周期数,在实际应用中可减少70%中断。

停机模式

若用户将Cortex-M3处理器的电源控制寄存器(Cortex Power Control Register,Cortex_PCR)中的SLEEPDEEP位置位,然后将STM32F103C8T6电源控制寄存器(STM32 Power Control Register.STM32 PCR)中的PDDS(Power Down Deep Sleep)位清除,就完成了STM32F103C8T6停机模式的设置。

当停机模式设置完毕后,CPU一旦遇到WFI或WFE指令就会停止工作,HSI和HSE也进人关闭状态。但Flash和SRAM将会继续保持电源供应,所以此时STM32F103C8T6的所有工作状态仍然是保留着的。和睡眠模式一样,停机模式也可以通过外设中断唤醒,然面在停机模式下,除了外部中断控制单元,所有设备的时钟都被禁止了,只能通过在GPIO引脚上产生电平边沿触发外部中断的方式来将STM32从停机状态下唤醒。

需要注意的是,外部中断通道除了与GPIO连接,还和RTC时钟的报警事件连接,加之RTC的计数时钟并非来源于STM32F103C8T6的设备总线(而是直接来自于LSI或LSE),因此还可以使用RTC模块实现定时将STM32F103C8T6从停机状态中唤醒。

在停止模式中,相对于休眠模式进一步关闭了其它所有的时钟,于是所有的外设都停止了工作,但由于其 1.2V区域的部分电源没有关闭,还保留了内核的寄存器、内存的信息,所以从停止模式唤醒,并重新开启时钟后,还可以从上次停止处继续执行代码。唤醒后,若由中断唤醒,先进入中断,退出中断服务程序后,接着执行 WFI指令后的程序;若由事件唤醒,直接接着执行 WFE后的程序。停止模式唤醒后,STM32F103C8T6会使用 HSI(HSI为8M)作为系统时钟。所以,有必要在唤醒以后,在程序上重新配置系统时钟,将时钟切换回HSE。唤醒延迟基本上是 HSI振荡器的启动时间,若调压器工作在低功耗模式,还需要加上调压器从低功耗切换至正常模式下的时间,若FLASH工作在掉电模式,还需要加上 FLASH从掉电模式唤醒的时间。

pYYBAGQC_J-AXfd4AAJCAtm7oq8815.png

顺便提一下,HSI振荡器与HSE的区别就在于一个是内部的时钟源,一个是外部的时钟源。HSI时钟信号由内部16 MHz RC振荡器生成,可直接用作系统时钟,或者用作PLL输入。HSI RC振荡器的优点是成本较低(无需使用外部组件)。此外,其启动速度也要比HSE晶振块,但即使校准后,其精度也不及外部晶振或陶瓷谐振器

待机模式

若将STM32F103C8T6电源控制寄存器中的SLEEP位进行置位,再将STM32_PCR中的PDDS位进行置位,这样,单片机则进入待机模式。

若要唤醒待机模式,有多种方式进行唤醒,分别位:RTC的闹钟事件、NRST的外部引脚复位、独立看门狗(IWDG)所产生的复位信号,以及PA0引脚上所产生的一个上升沿,但是若要是要该引脚所产生的上升沿来唤醒单片机,则必须事先设置为唤醒引脚功能。待机模式是STM32F103C8T6的最低功耗模式。当进入待机模式后,所有的SRAM数据、Cortex-M3处理器的寄存器和STM32F103C8T6的寄存器内容都将会被清零,效果等同于硬件复位。

pYYBAGQC_K6AMVh9AAE5eHAiZjk746.png


poYBAGQC_PqAPu8XAAPAQI_MQXk274.png

功耗测评

首先,为了保持评测的准确性,我们先用一个电阻负载来验证一下设备测试精度,电阻是0.1%精度的100K电阻,所以电阻的阻值误差我们先可以忽略。

打开功耗分析仪电源mPower1203测试设备,设置3.3V输出。可以看到,在配套的E-sight工具上显示了流过电阻的电流值。理论上是33uA,我们实测的值和理论值相差几十个nA,所以基本上设备的电流精度可以达到千分之一以内的精度。

pYYBAGQC_Q-AIipHAAQQGyTVLJ8962.png

现在开始评测STM32F103C8T6单片机的几种模式下的休眠功耗。

睡眠模式

我们从STM32F103C8T6单片机的规格书中,可以看到使用外部时钟,在主频为72MHz和48MHz,所有外设都关闭的情况下,功耗典型值约为5.5mA和3.9mA,我们围绕这两个值进行测试评估。

pYYBAGQC_RuADjWIAAE_TX-RnSg334.png

经测试和波形分析:

上图:主频为72MHz@关闭所有外设,睡眠功耗为5.889mA;

下图:主频为48MHz@关闭所有外设,睡眠功耗为4.175mA;

pYYBAGQC_SaAQHW6AAEJ4T43sIQ281.png

上图

poYBAGQC_SuANZ-dAAEVjWyV-MI443.png

下图

测试数据基本符合规格书中的典型值数据。从这个数据中我们可以了解到,当一个产品需要进行优化功耗时,在某些场合下,可以通过降低主频的方式来得到目标功耗。

停机模式

从STM32F103C8T6单片机的规格书中,可以看到,供电输出3.3V,停机模式下有两种情况。一种是调压器处于运行模式,对应的功耗典型值为24uA;另一种是调压器处于低功耗模式,对应的功耗典型值为14uA。我们围绕这两个值进行测试评估。

pYYBAGQC_TiAVcQaAAIFH93YmT0350.png

经测试和波形分析:

上图:调压器处于运行模式,停机功耗为23.042uA;

下图:调压器处于低功耗模式,停机功耗为12.857uA;

poYBAGQC_UKAIg_MAAEYH9MhQcY903.png

上图

pYYBAGQC_UeAJCDbAAEIwP3fxVk995.png

下图

测试数据基本符合规格书中的典型值数据。在配置STM32F103C8T6单片机进入停机模式时,特别需要注意一点,就是外部接8M晶振的管脚需要配置成普通GPIO,且也需要配置成模拟输入的方式。

待机模式

从STM32F103C8T6单片机的规格书中,可以看到,供电输出3.3V,待机模式下有三种情况。这三种情况分别对应的功耗的典型值约为3.4uA、3.2uA以及2uA。我们围绕这三个值进行测试评估。

poYBAGQC_VGAM_7-AAJA-BDp-RY694.png

经测试和波形分析:

图1:内部RC和独立看门狗均开启状态,待机功耗为2.912uA;

图2:内部RC开启,独立看门狗关闭状态,待机功耗为2.702uA;

图3:内部RC和独立看门狗均关闭状态,且低速振荡器和RTC均关闭,待机功耗为1.62uA;

poYBAGQC_ZCADnMyAAFD5VrmGGk304.png

图1

poYBAGQC_ZeASdVHAAEAzupBdAA945.png

图2

pYYBAGQC_aqAQDesAAEJ_vyoQtQ733.png

图3

测试数据基本符合规格书中的典型值数据。

最后,需要提一下,在我们进行功耗评测的时候,在和规格书进行对比时,需要了解典型值的含义。一般情况下,规格书上的值都是相对比较保守的,而且典型值是表示正态分布中一个1σ的值,也就是说68.27%的概率是落在典型值左右。换句话说,一共100个测试样本,68.27个样本的测试数据是满足典型值的。


关键字:STM32F103C8T6  MCU  功耗 引用地址:STM32F103C8T6 MCU功耗测评指南

上一篇:关于STM32浮点运算单元FPU的应用示例
下一篇:使用STM32、SFPGA和I.MX6ULL IO点亮LED灯

推荐阅读最新更新时间:2024-11-12 18:45

STM32单片机I/O的工作模式
最近有个朋友在设计低功耗设备,用的是STM32的主控,他知道我做过很多类似的超低功耗项目,于是向我咨询了一些问题,其中就包括I/O口的几种工作模式。今天我就详细的来总结一下这几种工作模式,让大家在以后的设计中知其然也知其所以然。 先说说GPIO 在聊这8种工作模式之前,我想先说一下GPIO的概念—通用输入输出GeneralPurposeInputOutput简称GPIO,就是芯片引脚可以通过它们输出高、低电平,也可以通过他们输入、读取引脚的电压、电平状态。 下面的8种工作模式我将围绕下图进行分析介绍,读懂这一张图大家基本就可以完全理解STM32的GPIO了。希望大家仔细的看一看。 四种不同的输出模式 推挽输出:该模式下引脚
[单片机]
STM32<font color='red'>单片机</font>I/O的工作模式
PIC 单片机引脚中断程序的设计技巧
简介:主要介绍PIC 单片机引脚中断程序的设计技巧, 这样设计的引脚变化程序,CPU开销小,效率高,不会出现堆浅溢出的问题,提高了系统的实时性。 1 、简 述 所有的中档系列PIC单片机,PORTB端口最高的4个引脚(RB7~RB4)在设为输入模式时,当输入电平由高到低或由低到高发生变化时,可以让单片机产生中断。这就是通常所说的引脚状态变化中断。 在设计引脚中断程序时,有三个需要特别注意的地方。一是,在清除P0RTB中断标志位RBIF之前,必须安排一条必不可少的,以PORTB端口数据寄存器 PORTB为源寄存器的读操作指令。放置这一指令的目的有时并不只是为了读取有用的数据,而是为了取消状态变化的硬件信号,以便顺利清除RBI
[单片机]
51单片机STC89C52控制LED闪烁(使用for语句实现延时)
/*-----------------------包含头文件区域-------------------------*/ #include reg52.h //单片机头文件 /*-----------------------端口/引脚定义区域----------------------*/ sbit LED=P2^0; //位定义P2.0引脚名为LED /*-----------------------主函数区域-----------------------------*/ void main() { unsigned int i; //定义无符号整形变量i(范围为0~65535) while(1)
[单片机]
51单片机EEPROM(E2PROM)测试程序
/ * * 文件名称: eeprom.c * 摘 要: 对EEPROM某个扇区进行读、写和擦除,并发送到串口 UART=9600 8位数据 CRYSTAL=18.432 TIMER_MODE=12T (EEPROM就是DATA FLASH,擦除只能按扇区,读写可以按字节,字节为0XFF时才可以写) * CPU芯片: STC12C5A16S2 instruction mode:1T * 作 者: XCY * 修改日期: 2012年3月27日 * */ #include reg52.h #include intrins.h typedef unsigned char BYTE; typedef unsigned
[单片机]
利用PIC单片机控制步进电机控制系统的方法概述
1 引言 步进电机是一种离散运动的装置,它和现代数字控制技术有着紧密的本质的联系。步进电机亦是一种将电脉冲转化为角位移或直线位移的执行机构,当步进电机驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(又称之为步进角),为此可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过脉冲频率来控制步进电机的转动速度和加速度,从而达到调速的目的。从以上所述可知,步进电机是可以用脉冲信号直接进行定位控制,由于其具有一定的精度,且控制线路简单,使用方便、可靠;因此它广泛地应用于工业自动控制、数控机床、组合机床、机器人、计算机外围设备(扫描仪、磁盘驱动器、打印机)、照相机(包括光学照相机与数码照相机),投
[单片机]
利用PIC<font color='red'>单片机</font>控制步进电机控制系统的方法概述
利用Astro-Rail分析FFT芯片的功耗和电源完整性
引言 Astro-Rail工具为芯片设计提供了在设计和签核阶段进行功耗、电压降和电迁移分析的功能。用Astro-Rail工具对一个5百万门的设计进行功耗、电压降和电迁移分析,所需时间不到一个小时。分析完成后,Astro-Rail将可能出问题的区域用不同的颜色在版图上清晰地显示出来,以帮助设计者分析并查找问题。其提供的签核分析结果和Star-RCXT反标后再分析的结果相差不到5%。Astro-Rail是Synopsys Galaxy平台的一个重要部件,利用独有的动态宏模块技术取得了突破性的速度,是一般rail分析工具速度的2倍~3倍。 文中的FFT芯片是16位的128点FFT/IFFT定点处理器,该处理器主要应用于基于OFDM的
[电源管理]
利用Astro-Rail分析FFT芯片的<font color='red'>功耗</font>和电源完整性
单片机SPI总线时序详解
SPI总线是Motorola公司推出的三线同步接口,同步串行3线方式进行通信:一条时钟线SCK,一条数据输入线MOSI,一条数据输出线MISO;用于 CPU与各种外围器件进行全双工、同步串行通讯。SPI主要特点有:可以同时发出和接收串行数据;可以当作主机或从机工作;提供频率可编程时钟;发送结束中断标志;写冲突保护;总线竞争保护等。 SPI总线有四种工作方式(SP0, SP1, SP2, SP3),其中使用的最为广泛的是SPI0和SPI3方式。SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性(CPOL)对传输协议没有重大的影响。如果CPOL=0,串行同步时钟的空闲状态为低电平
[单片机]
<font color='red'>单片机</font>SPI总线时序详解
GD32 MCU电源复位和系统复位有什么区别
GD32 MCU的复位分为电源复位和系统复位,电源复位又称为冷复位,相较于系统复位,上电复位更彻底,下面为大家详细介绍上电复位和系统复位的实现以及区别。 电源复位包括上电/掉电复位或者从standby模式唤醒产生的复位,电源复位将会复位除备份域以外的所有寄存器以及SRAM,如果软件上希望实现电源复位,可以通过GPIO控制电源或者通过进入standby之后通过看门狗唤醒实现。 系统复位实现的方式比较多,包括外部引脚复位、独立看门狗复位、窗口看门狗复位、内核软复位等,系统复位电路如下图所示,内部系统复位会至少产生20us的NRST低电平,进而被内部电路捕捉到,实现系统复位。因而此处就要有个要求,外部电路不能影响内部拉低NRST
[单片机]
GD32 <font color='red'>MCU</font>电源复位和系统复位有什么区别
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved