ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
打印

[STM32L1] 慎用STM32L

[复制链接]
1891|40
跳转到指定楼层
楼主
最近,在做一个低功耗项目,要求休眠唤醒后,最快速度采集3个ADC通道数据,
先前看技术手册,发现STM32L的UA/MHZ运行电流参数非常棒,
结果采用STM32L151,最后功耗很不理想!!!

通过调试发现,主要原因出在STM32L的指令上,例如你只要对一个外设寄存器操作,就要10US以上时间!!!

STM32的低功耗参数确实好看,可是实际他的取外部RAM数据指令太垃圾了。

我用PIC18试验了一下,每ms唤醒一次采样3个通道,然后睡眠,随便写写代码,平均功耗76UA。
用STM32L151实验了一下,同样条件,平均功耗240UA,对库函数代码优化采用寄存器操作,仍然需要142UA。

使用特权

评论回复

评论

xch 2019-7-23 21:10 回复TA
多长时间采集一轮?空闲时进入什么低功耗模式? 
songchenping 2019-7-22 21:37 回复TA
ST不会犯这种低级错误的。看看自己的软件。 

相关资料

沙发
| 2019-7-22 11:02 | 只看该作者
说道低功耗,还点是TI的MSP430系列的,做了好多量产的表。压力表、水表、燃气表等等。

使用特权

评论回复
板凳
| 2019-7-22 13:07 | 只看该作者
STM8L的,试过,功耗还行。关键是要自己分析原因,对外设寄存器操作需要10us,肯定是自己的问题。

使用特权

评论回复
地板
 楼主 | 2019-7-22 14:47 | 只看该作者
gx_huang 发表于 2019-7-22 13:07
STM8L的,试过,功耗还行。关键是要自己分析原因,对外设寄存器操作需要10us,肯定是自己的问题。 ...

STM32L151唤醒以后,自动导到4MHZ的MSI时钟,对外设寄存器操作,实际上是个读修改写的过程。发言之前最好自己调查研究一下,否则光凭印象回答问题,既不能解决问题,又不提示作用,不多少是在显摆自己吗??

使用特权

评论回复
5
 楼主 | 2019-7-22 14:56 | 只看该作者
gx_huang 发表于 2019-7-22 13:07
STM8L的,试过,功耗还行。关键是要自己分析原因,对外设寄存器操作需要10us,肯定是自己的问题。 ...

确实MSP430做的早,专注于低功耗,一般比较靠谱。现在一般片子的静态低功耗都做得不错,往往和MSP430不相上下。
但是实际的低功耗应用,往往ADC外设很重要,牵涉到运行时的功耗,往往指令集也很重要,MSP430都有通盘考虑。

举个例子,msp430de ADC可以在休眠下工作,stmL151就不可以,而且由于其唤醒以后总是接入MSI,而ADC时钟取自HSI,还要在唤醒以后,重新使能HSI时钟,这都无形中增加了额外的运行时间。

stm32L低功耗账面数据真的不错,可实际大打折扣。

使用特权

评论回复
6
| 2019-7-22 15:08 | 只看该作者
shizaigaole 发表于 2019-7-22 14:47
STM32L151唤醒以后,自动导到4MHZ的MSI时钟,对外设寄存器操作,实际上是个读修改写的过程。发言之前最好 ...

应该是你在显摆呀。
你说操作外设寄存器需要10us以上,这说法肯定有问题了,原来是切换时钟的时间。
没研究过32L,我只对你上面的描述有疑问而已。

使用特权

评论回复

评论

shizaigaole 2019-7-22 15:36 回复TA
不是切换时钟的问题,即使是4MHZ时钟,10US以上也不应该。本质上是其对外设寄存器修改比较耗时。 
7
| 2019-7-22 15:17 | 只看该作者
shizaigaole 发表于 2019-7-22 14:56
确实MSP430做的早,专注于低功耗,一般比较靠谱。现在一般片子的静态低功耗都做得不错,往往和MSP430不相 ...

以下是特意看了一下资料:
The ADC frequency is independent from the CPU frequency, allowing maximum sampling
rate of 1.14 MSPS even with a low CPU speed. The ADC consumption is low at all
frequencies (~25 μA at 10 kSPS, ~200 μA at 1MSPS). An auto-shutdown function
guarantees that the ADC is powered off except during the active conversion phase.
似乎和你说的不一样。

使用特权

评论回复
8
 楼主 | 2019-7-22 15:38 | 只看该作者
gx_huang 发表于 2019-7-22 15:08
应该是你在显摆呀。
你说操作外设寄存器需要10us以上,这说法肯定有问题了,原来是切换时钟的时间。
没研 ...

不是切换时钟的问题,即使是4MHZ时钟,10US以上也不应该。本质上是其对外设寄存器修改比较耗时。

使用特权

评论回复
9
 楼主 | 2019-7-22 15:45 | 只看该作者
gx_huang 发表于 2019-7-22 15:17
以下是特意看了一下资料:
The ADC frequency is independent from the CPU frequency, allowing maximum ...

stm32的ADC所谓的自动断电功能,并非休眠时候转换功能。
而且stm32L的ADC启用自动断电功能,在使用16MHZ HSI时钟的情况下,ADC耗电达到630UA,仍然算是非常大的耗电!

使用特权

评论回复
10
| 2019-7-22 16:12 | 只看该作者
多年前就发现类似问题了,因为低功耗不仅仅是要求待机功耗低,还要求唤醒工作的时间尽可能短,这点430有明确的描述,其它低功耗类单片机大多语焉不详

使用特权

评论回复
11
 楼主 | 2019-7-22 16:22 | 只看该作者
ayl439 发表于 2019-7-22 16:12
多年前就发现类似问题了,因为低功耗不仅仅是要求待机功耗低,还要求唤醒工作的时间尽可能短,这点430有明 ...

stm32L的唤醒时间也还行,stop模式下8US,不如430,还过得去。

就是没想到其外设寄存操作那么耗时,比如说启动ADC命令,你要修改ADC外设寄存器的ADON位,

SET_BIT(hadc.Instance->CR2, ADC_CR2_SWSTART);       
这条预计实际上是  hadc.Instance->CR2 |= ADC_CR2_SWSTART;

实际执行包括,读CR2,修改,写回CR2,这个过程4MHZ下,10US以上时间!!!

别的单片机再慢也比这快,没想到其外设寄存器操作那么慢。

使用特权

评论回复
12
| 2019-7-22 17:01 | 只看该作者
本帖最后由 ayb_ice 于 2019-7-22 17:02 编辑
shizaigaole 发表于 2019-7-22 16:22
stm32L的唤醒时间也还行,stop模式下8US,不如430,还过得去。

就是没想到其外设寄存操作那么耗时,比如 ...

不可能10us的时间,哪怕是4MHZ的频率,这就几条指令而已,

可以看反汇编,可以设断点验证,
极有可能是唤醒后先进入了中断

使用特权

评论回复

评论

shizaigaole 2019-7-22 20:45 回复TA
可以自己试试再回答。 
13
| 2019-7-22 17:40 | 只看该作者
shizaigaole 发表于 2019-7-22 16:22
stm32L的唤醒时间也还行,stop模式下8US,不如430,还过得去。

就是没想到其外设寄存操作那么耗时,比如 ...

stm32有专门的置位和复位,不用回读的。

使用特权

评论回复

评论

shizaigaole 2019-7-22 20:57 回复TA
不是每个外设寄存器都有置位复位 
14
| 2019-7-22 21:38 | 只看该作者
lvyunzeng 发表于 2019-7-22 11:02
说道低功耗,还点是TI的MSP430系列的,做了好多量产的表。压力表、水表、燃气表等等。 ...

那是在很久以前,其他品牌还没推出低功耗产品的时候。

使用特权

评论回复
15
| 2019-7-22 22:21 | 只看该作者
mcu的功耗在你整版功耗的占比是多少?

使用特权

评论回复
16
| 2019-7-22 22:44 | 只看该作者
我比厂家聪明系列

使用特权

评论回复
17
| 2019-7-22 23:06 | 只看该作者
说到低功耗,以前用了多年的凌阳8位MCU,做电子表或计算器,推几十段LCD,电流才3~5uA。

使用特权

评论回复
18
| 2019-7-23 07:15 | 只看该作者
看看SILAB的吧,做手表的蛮多的。

使用特权

评论回复
19
| 2019-7-23 08:27 | 只看该作者
ayb_ice 发表于 2019-7-22 17:01
不可能10us的时间,哪怕是4MHZ的频率,这就几条指令而已,

可以看反汇编,可以设断点验证,

这种东西还用试吗,反汇编我经常看,最多就是读改写而已,如果用位带技术,还要快些

使用特权

评论回复
20
| 2019-7-23 09:05 | 只看该作者
可能是库函数降低了执行效率吧,直接用寄存器可能会快一点。
我最近一直在用L031的,stop模式下电流400nA,实测数据和资料一致。
对于工作速度,我只测过浮点运算,都用2M的主频,12ms的运算量用PIC16L1825算,需要60ms。
其他没比较过,就不太清楚了。

使用特权

评论回复

评论

shizaigaole 2019-7-23 09:32 回复TA
我测试的时候,几乎把所有的函数库改成了直接操作寄存器,1ms唤醒一次,采样3个ADC数据,stm32L仍然要124UA! 而采用pic18lf25K40,仅仅需要76UA 
shizaigaole 2019-7-23 09:31 回复TA
当然,浮点运算比PIC16要快的多。你要是换成PIC24就没那么多差距了。要是换成PIC32,秒stmL应该没什么问题。 
shizaigaole 2019-7-23 09:29 回复TA
那是静态的功耗,大厂家只要手册上标出来,都是对的。他的给出的指标都没问题。 纯粹的运算速度他的指标也没问题,但是他的对外设操作的指令等待时间长!而且其ADC时钟设计也有问题,唤醒以后HSI是关闭,你要ADC采样必须线使能HSI,使能时钟自然就有等待时间,无形当中会增加很多运行时间! 
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

在线客服 快速回复 返回顶部 返回列表