你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32L152的低功耗测试

[复制链接]
aimejia 发布时间:2018-5-23 11:15
本帖最后由 aimejia 于 2018-5-23 11:18 编辑
5 {) p; `6 e  G4 |/ F* h( j, N. a& }+ k, E* q, O) ]8 h; Y
本文将验证STM32L32在stop模式下的低功耗电流。
$ p0 c; u7 \) r7 r9 m& ]
* W2 {: V% ]% h' ]在ST官网的STM32L152RE芯片介绍上明确有说明此芯片在stop模式下可以达到560nA,纳安!并且还可以支持16个外部中断唤醒。
8 Z4 x: G% x0 G* B: A9 Q# [: b
  `5 {: }, W# m1 D7 x! Q 1.png
9 T" }; C$ E/ R0 \& w' o
: V) D" Z7 w( K3 @% {/ ]2 D) a真的这么强!下面来验证一下。7 G" r! ~: e& T
3 o( g  E; U( ]# i$ T
采用NUCLEO-L152板子进行验证,使用CubeMx生成工程代码。( ^9 x3 O1 v; D: U" r

; O  L) D; N# h% q+ O在CubeMx中选择STM32L152RE这款芯片,pinout如下设置:
$ d+ Q3 V2 ~1 C 2.png , z4 T- H& W2 X
如上图,只是简单地将PC13,PB9,PB5,PB4,PD2,PA12,PB15,PB1设置为外部中断。
& h  [3 y7 y& p& X8 M0 t+ s3 T; C# k4 v3 @* c" `+ u; d! ~( z2 G( L7 H
为了得到最低功耗,时钟树采用芯片内部时钟HSI:
: s* Q& o6 u' f, b/ A1 N+ P1 J; \( F" ]: Y; y
3.png & Z* u5 a9 ^! H& W1 i
( P7 }- I! ]2 v: |1 h. S0 @
在configuration下,将GPIO都设置为下拉,PC13在NUCLEO板子上是按键,设为上拉。
+ t% t" @, t6 I  b
5 a2 Q0 f& W% M) }( Q# B/ ^ 4.png 3 b- H# ?- m* w

: f( H! b& G) y" C) ?生成代码。main函数稍作修改:* |8 @# p7 e" z/ X  v5 k3 B5 b
[cpp] view plain copy
4 s9 l9 \1 ~" ~$ t6 ?9 @
, \' y$ K. b  W/ W2 S* z: J7 M
. C* J, A4 |$ N# D

8 x7 o( v: R# M
  • int main(void)  
  • {  
  •   
  •   /* USER CODE BEGIN 1 */  
  •   
  •   /* USER CODE END 1 */  
  •   
  •   /* MCU Configuration----------------------------------------------------------*/  
  •   
  •   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */  
  •   HAL_Init();  
  •   
  •   /* Configure the system clock */  
  •   SystemClock_Config();  
  •   
  •   /* Initialize all configured peripherals */  
  •   MX_GPIO_Init();  
  •   
  •   /* USER CODE BEGIN 2 */  
  •   HAL_PWREx_EnableUltraLowPower();  
  •   HAL_PWREx_EnableFastWakeUp();  
  •   /* USER CODE END 2 */  
  •   
  •   /* Infinite loop */  
  •   /* USER CODE BEGIN WHILE */  
  •   while (1)  
  •   {  
  •   /* USER CODE END WHILE */  
  •   
  •   /* USER CODE BEGIN 3 */  
  •     HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);  
  •   
  •     /* Configures system clock after wake-up from STOP: enable HSI, PLL and select
  •       PLL as system clock source (HSI and PLL are disabled automatically in STOP mode) */  
  •     SystemClockConfig_STOP();  
  •     HAL_Delay(200);  
  •   }  
  •   /* USER CODE END 3 */  
  •   
  • }  8 v! ^6 u2 L0 i+ f5 Y! Q; _3 H
SystemClockConfig_STOP函数如下配置:
, U+ _# C4 X% f3 f" D# Y1 f& x. L, a2 W( `: o
[cpp] view plain copy
' v8 A" U1 l9 v
' N, G& M9 r4 j

: X5 K1 [  V- ^& e. e; F* }

4 t% \' O! \3 s4 f
  • static void SystemClockConfig_STOP(void)  
  • {  
  •   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};  
  •   RCC_OscInitTypeDef RCC_OscInitStruct = {0};  
  •   
  •   /* Enable Power Control clock */  
  •   __HAL_RCC_PWR_CLK_ENABLE();  
  •   
  •   /* The voltage scaling allows optimizing the power consumption when the device is
  •      clocked below the maximum system frequency, to update the voltage scaling value
  •      regarding system frequency refer to product datasheet.  */  
  •   __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);  
  •   
  •   /* Poll VOSF bit of in PWR_CSR. Wait until it is reset to 0 */  
  •   while (__HAL_PWR_GET_FLAG(PWR_FLAG_VOS) != RESET) {};  
  •   
  •   /* Get the Oscillators configuration according to the internal RCC registers */  
  •   HAL_RCC_GetOscConfig(&RCC_OscInitStruct);  
  •   
  •   /* After wake-up from STOP reconfigure the system clock: Enable HSI and PLL */  
  •   RCC_OscInitStruct.OscillatorType      = RCC_OSCILLATORTYPE_HSI;  
  •   RCC_OscInitStruct.HSEState            = RCC_HSE_OFF;  
  •   RCC_OscInitStruct.HSIState            = RCC_HSI_ON;  
  •   RCC_OscInitStruct.PLL.PLLState        = RCC_PLL_ON;  
  •   RCC_OscInitStruct.PLL.PLLSource       = RCC_PLLSOURCE_HSI;  
  •   RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;  
  •   RCC_OscInitStruct.PLL.PLLMUL          = RCC_PLL_MUL6;  
  •   RCC_OscInitStruct.PLL.PLLDIV          = RCC_PLL_DIV3;  
  •   if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)  
  •   {  
  •     Error_Handler();  
  •   }  
  •   
  •   /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
  •      clocks dividers */  
  •   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;  
  •   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;  
  •   if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)  
  •   {  
  •     Error_Handler();  
  •   }  
  • }  
    % V6 a2 e3 r9 v+ x

, k) K! W& ~' a: T6 {! R编译烧录后使用电流表进行测试:
% U  R6 p) D! [$ Q, }5 k7 e  a9 l' T* {8 _4 `$ G: q
5.jpg
, v1 I3 k! a+ h
4 ]) h: p- w+ Y: S' V! U0.3uA! 看来所言非虚,300nA,按下按键,发现电流变大了,如下:# d9 g6 m0 \2 S" n# y7 B
, G+ ~" v% {4 c% \* U
6.jpg . `7 B; ]9 v' s% P1 g2 e# x3 K

5 c+ ~; W1 I7 w; I  I! W9 k( O9 F电流变为11mA,这个位为工作电流,这说明外部中断生效了。
5 ]; R8 D: c. z% r3 k
) |1 p# E) I0 p: u* vSTM32L152在低功耗这块,确实还不错!实测stop模式下300nA的电流,比手册上所示的560nA还低,看来ST还是比较保守。
0 U5 i% ~- f- w+ d+ l+ u3 E- g* k! u
1 x( Q; ]$ ]$ b& r# H
4 w; k' u$ Q' j; E2 v4 \: U( O3 s. j+ n3 K/ b4 b) n  l+ M

4 g& X5 E9 X% g" Z. N( f( ]" y8 p+ Y3 v. Y6 i9 Y) N
转载自FLYDREAM0; J" l) P0 C9 {& ?( E

$ Z  g9 p1 S3 ?) l
/ q2 j- C, E' ?+ r) H! s7 I* ]6 s4 i$ `
赞 收藏 1 评论6 发布时间:2018-5-23 11:15

举报

6个回答
七哥 回答时间:2018-5-24 13:44:42
我是来看34401A的,顺便看看帖子% J) X- F" |' b% n2 s) n; \
谢谢分享$ a& V7 ]. Y/ U( h' H* u1 S
wyxy163@126.com 回答时间:2018-5-24 14:27:03
提示: 作者被禁止或删除 内容自动屏蔽
大陶 回答时间:2018-5-24 15:11:09
好厉害
zhdzhd 回答时间:2018-5-24 21:42:49
我也是奔着34401A来的
myfocus-2048857 回答时间:2018-5-29 11:03:55
好贴,拜读,favorite
你快回来 回答时间:2019-2-27 13:52:52
是不是L系列RE功耗最低?

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版