×
嵌入式 > 技术百科 > 详情

深入STM8L低功耗评测(二)

发布时间:2020-06-17 发布时间:
|

嵌入式的初学者一般对MCU的结构保持着一种神秘感,到底MCU里面是什么样子?它们是如何连接的?又是如何协同工作的?其实MCU内部并没有那么复杂,下图是截选自STM8 USER MANUAL中的 STM8L15X设备部分框图,可以看到MCU的内部从逻辑上来看其实就是把各个功能模块(如:TIMER,SPI,I2C等都是)通过总线连接在一起。我们可以通过配置芯片内部的寄存器选择打开或是关闭这些模块。

在上一集中我们讨论了不同频率下系统消耗电流的情况。有些朋友自然就会问到:既然MCU的内部是由各个不同的功能模块连接起来的,那么在实际项目中如果我们把用不上的模块进行某些设置是不是能够更加“省电”呢?如果能的话,那么应该如何设置呢?事实胜于雄辩,下面我们就来对STM8的各个模块进行实际功耗测试。

1. GPIO口测试

GPIO全称为General purpose I/O ports,从这个名称也可以看出这是一个通用的输入/输出接口,STM8L系列最多可有41个GPIO口,并且所有的端口都可以被配置为以下模式中的一种:

  • 输出推挽低速模式
  • 输出推挽高速模式
  • 输出开漏高速模式
  • 输出开漏低速模式
  • 输入浮空模式
  • 输入上拉模式

对于所有的输出模式,通过寄存器还可以配置为输出低电平或高电平(开漏模式除外)。下面我们就对IO的各种模式进行功耗测试。测试的方法也比较简单:外部供电为3.3V,开启A/D转换模块和液晶显示屏,程序中把除了PE7、PC7(由于这两个引脚接有LED灯,所以直接设为输出低电平,避免LED灯点亮消耗部分电流)、PF0(A/D转换采集引脚)以及所有必需用到的引脚(液晶显示引脚)外的所有普通IO口统一设置为上述模式中的一种,通过STM8自带的IDD测试其消耗电流。为了保证数值的准确性,对每种模式的测试值进行了1000次采集后取其平均数。下面10张图片分别是以下10种模式对应的消耗电流:

  • 1 test : GPIO_Mode_Out_PP_Low_Slow 模式
  • 2 test : GPIO_Mode_Out_PP_High_Slow模式
  • 3 test : GPIO_Mode_Out_PP_Low_Fast模式
  • 4 test : GPIO_Mode_Out_PP_High_Fast模式
  • 5 test : GPIO_Mode_Out_OD_Low_Fast模式
  • 6 test : GPIO_Mode_Out_OD_Low_Slow模式
  • 7 test : GPIO_Mode_Out_OD_HiZ_Fast模式
  • 8 test : GPIO_Mode_Out_OD_HiZ_Slow模式
  • 9 test : GPIO_Mode_In_FL_No_IT 模式
  • 10 test : GPIO_Mode_In_PU_No_IT模式

 

 

 

 

 

通过测试,我们发现在DISCOVERY板上各种模式消耗电流均不大,约6mA左右, 最高与最低相差最多也约为0.1mA。但从总体看来,设置为PP要比设置为OD消耗更多的电流。10种模式中以第6种模式:GPIO_Mode_Out_OD_Low_Slow模式所消耗的电流最小。所以如果要使得系统功耗降到最低,在STM8的项目中尽量把不用的IO引脚设置为OD低速输出模式,并把其输出值设置为0.当然,在实际的项目中具体问题还是要具体对待的。

2. TIMER功耗测试

除了GPIO外,TIMER恐怕是MCU中使用最多的模块了。STM8系列内部共有5个定时器,不同的定时器总体结构相差不大,但都各有区别。其中TIMER1为16位的功能丰富的用于高级控制的定时器,能够提供普通加、减计时器,输入捕获,比较输出,PWM输出, 单次脉冲输出等各种功能;TIMER2,3,5为普通功能的16位定时器,相比于TIMER1来说,它们功能相对弱些,TIMER4为8位的基本功能定时器。需要提醒大家的是,并不是所有的STM8系列都包含全部5个定时器,根据芯片所属不同的系列往往只有其中的3到4个,具体请大家参考USER MANUAL手册TIMER这一章。
Discovery开发板上搭载的是一颗STM8L152C6T6芯片,根据数据手册中的描述,这时一颗medium density devices,所以它只有TIMER1,2,3,4。下表说明了STM8L152C6T6中各个定时器所支持的功能。

由于STM8L152C6T6 TIMER众多,因此下面我们将测试不同定时器模块开启时消耗电流的大小。
测试程序非常简单。打开相应定时器的时钟,开启TIMER模块后对DISCOVERY板子进行电流测量。为了保证测试准确,我们为每种模式进行了1000次测量后取其平均值。下面图1表示的是未打开任何定时器模块时系统消耗的电流,约为5.92mA,当开启定时器1模块后,系统的消耗电流骤增,达到了6.12mA。

 

下面两张图分别为仅开启定时器2和仅开启定时器3时系统的消耗电流。根据前面所述,这两个定时器功能类似,均为16位的普通定时器,所以其消耗电流也相差不大。

 

最后这一张图片为仅开启定时器4时所消耗的电流,定时器4为8位的普通定时器,其结构相比于前面的3个定时器来说比较简单,所以其消耗电流也较小。

通过对不同定时器的测试,我们可以发现功能越多,结构越复杂的定时器运行时所消耗的电流也更多,而功能越少,结构越简单的定时器运行时所消耗的电流也越少。这就提醒我们在选择定时器的时候更要遵守够用就好的原则,不要一味的追求功能强大。能用定时器4的地方就不要用定时器2,3,能用定时器2,3的地方就不要用定时器1。同时,也告诉我们如果没有用到某些模块的话(如I2C,SPI等)尽量不要打开相应的模块,因为打开的模块越多,消耗的电流也就越大。
低功耗是未来发展的趋势,各个半导体厂商都在这场竞争中使出浑身解数。从工艺到材料,从体积到工作电压。但是要真正做好一款低功耗产品光靠厂商的努力还是不够的。很多时候我们看到同一个芯片做出来的产品功耗却大相径庭。在嵌入式系统中硬件是基础,软件才是灵魂。如果才能做得更好?这值得我们深深思考。



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
无人机新突破:或将利用手机发射塔追踪无人机