STM32L476使用RT-Thread PM组件功耗偏高

发表在 PM2019-4-19 11:23 [复制链接] 5 983

我前两天在调试stm32l476的低功耗问题。发现一些问题:
+ i: K7 K. b: v: ^; g: @7 C     1.我在裸机情况下,STOP2模式的功耗是1.5uA;( ~: ~3 F0 M+ p/ a9 y* n
    2.使用RT-Thread的pm组件时,STOP2模式的低功耗为30uA左右,还不断的浮动。$ E) ?8 m/ ]* H
    其中,在使用PM组件时,我已经把systick 、lptimer 及所有的IO的时钟都关闭了。* D# C( \2 s6 J! p
   不知道哪里还有功耗。想搞清楚使用PM组件时,是哪些功能增大了系统的功耗?求解答,多谢!! G9 x. `% g4 `5 }

' h" b& p; `1 c. |" B# c% b
+ `: q8 q& g% N
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2019-4-19 13:49:26 | 显示全部楼层
芯片级的处理,裸机和 RTOS 都是一样的,比如同样的STOP2 模式,不应存在差异,当你关闭了systick , lptimer时,进入STOP2 模式时,系统也就停止了,没有外部中断来的时候,跟裸机的功耗应该是一样的。所以是否是检查一下外设时钟,以及对应的外围电路状态等,在进入STOP 模式之前是否都已经处理了,比如串口?RT-Thread 的工程,串口功能一般都是打开。
使用道具 举报 回复
发表于 2019-4-19 14:43:57 | 显示全部楼层
水清沙白 发表于 2019-4-19 13:49
" L' h3 K5 }) }9 l3 N- t芯片级的处理,裸机和 RTOS 都是一样的,比如同样的STOP2 模式,不应存在差异,当你关闭了systick , lptim ...

1 ^! ^, X0 F8 D3 d               __HAL_RCC_USART1_CLK_DISABLE();7 v5 Q( p+ _: p; a

( b2 M% [/ n1 f( I% ^  B, v                __HAL_RCC_GPIOA_CLK_ENABLE();
* ~3 q- E% \( S2 ]. ~3 q0 v                __HAL_RCC_GPIOB_CLK_ENABLE();1 {( `2 h- w" w  `$ \
                __HAL_RCC_GPIOD_CLK_ENABLE();
3 \+ j2 V0 M0 c                __HAL_RCC_GPIOE_CLK_ENABLE();+ I. ]# l4 q: Z$ l! J3 L) |5 k3 k
                __HAL_RCC_GPIOF_CLK_ENABLE();
) w% a1 `, o! \2 Y) D; w! I! O                __HAL_RCC_GPIOG_CLK_ENABLE();& S% h+ X; U! d
                __HAL_RCC_GPIOH_CLK_ENABLE();    + A9 |: f8 C/ x5 u4 v

' b- Q( ~0 W8 h6 F+ ~+ A6 l; w                GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;5 w. {. _/ \. [  o$ K8 }
                GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
! Y; {4 Y% G7 l, B+ h                GPIO_InitStruct.Pull = GPIO_NOPULL;
, T+ y6 ~" B" j$ w; l  i$ M) |                GPIO_InitStruct.Pin = GPIO_PIN_All;+ k4 Y3 R: F( j% Z- H
/ q9 Y3 W; V: f- g
                HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
$ M! L, R2 w* u1 Y                HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
2 R; [: h( L6 {                HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
' a1 x& j+ U1 q                HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
! Z1 D9 C% g3 E, @& @* X                HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);
$ _: T( s6 v% y5 \% n& |                HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);" i5 H. _, |3 ?' `( }7 v
                HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);  
2 K( V+ N+ M1 Y+ T" y/ y+ a" u5 ?6 I2 W5 R# Z
                __HAL_RCC_GPIOA_CLK_DISABLE();
; \8 Y: A; A' u' v; F* W0 p* S                __HAL_RCC_GPIOB_CLK_DISABLE();
) S% }7 E( K$ R9 _                __HAL_RCC_GPIOD_CLK_DISABLE();
& l$ t* \; ?; O& k" R                __HAL_RCC_GPIOE_CLK_DISABLE();
$ i; s3 j5 v+ m2 P5 E( \3 f                __HAL_RCC_GPIOF_CLK_DISABLE();' E$ P7 |5 n  q9 h; V4 H- x
                __HAL_RCC_GPIOG_CLK_DISABLE();
: s3 }: C, @# B$ G: d                __HAL_RCC_GPIOH_CLK_DISABLE();
9 R* J) @# k9 e6 T+ b* }( o               
- u( B+ ~1 a- E9 w7 w1 B9 ?                SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |
/ z$ c, E) P8 Z/ F  X2 B                   SysTick_CTRL_TICKINT_Msk   |
# U8 w/ z0 j3 d0 }1 K9 o1 _                   0;//SysTick_CTRL_ENABLE_Msk;  
5 l* U. G  I) r9 W6 A  c  `+ Z% e! k, T7 p: Z( x5 H' ?5 m1 `
                __HAL_RCC_LPTIM1_CLK_DISABLE();
; G' ]" m9 r) P0 v4 t# Q. c5 j/ O# |8 ~" J
上面是我进入STOP2模式之前的操作,首先,关闭串口和所有IO口的时钟;然后,关闭systick的时钟;最后,关闭lptime的时钟。现在所有的外设的时钟应该都是关闭的。' \3 K4 @9 Y7 |! y
6 U( j" {4 S9 g7 g% k( t
使用道具 举报 回复
发表于 2019-4-29 13:57:04 | 显示全部楼层
本帖最后由 水清沙白 于 2019-4-29 14:02 编辑
  J: s! P* P5 G; o
* g9 w, K' W9 W4 Q最近刚好在调试 STM32 L476 的低功耗,外设的处理很重要,根据外围电路来确定,该输出高的输出高,该输出低的就输出低,不然会导致漏电。
* G- ]+ Z' S2 b% H
$ N$ n: h# O8 x% s5 x如果是 L476 的 Nucleo 板子,PC13 用作输入唤醒,配置浮空输入,下降沿中断:
$ X9 J, C4 r$ k" t& R: d! a$ z9 L6 p# y* D, F4 I! B
```
7 L% \5 a! T6 [9 A9 C% i  j    rt_pin_mode(WAKEUP_PIN, PIN_MODE_INPUT);9 d# l5 }+ U# |9 Q* R
    rt_pin_attach_irq(WAKEUP_PIN, PIN_IRQ_MODE_FALLING, wakeup_callback, RT_NULL);& Y$ N% z- r. P, \
    rt_pin_irq_enable(WAKEUP_PIN, 1);
8 Y. F5 H. j  d, L; M' P$ T```
: y% E; b& m0 e, r& m9 b8 g) y5 M9 w( @; m
这是我在 RTT 上测试的功耗,1.5uA左右。" g' O2 R- g- W" j
微信图片_20190429135606.jpg
7 A* _9 t; N/ @
使用道具 举报 回复
发表于 2019-5-17 17:48:37 | 显示全部楼层
多谢多谢,对我很有帮助
使用道具 举报 回复
发表于 2019-9-18 22:07:27 | 显示全部楼层
水清沙白 发表于 2019-4-29 13:57
% q7 J* B! ?  E/ d9 H3 Q2 T1 w/ |, N最近刚好在调试 STM32 L476 的低功耗,外设的处理很重要,根据外围电路来确定,该输出高的输出高,该输出低 ...

% [; p$ ?0 k. `4 a你好,可否把你测试的工程代码传上来,我发现潘多拉开发板里面的pm例子不能正常的进入低功耗,想查一下什么问题
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RT-Thread开发者社区 ( 沪ICP备13014002号-1

有害信息举报电话:021-31165890 手机:18930558079

© 2006-2019 上海睿赛德电子科技有限公司

Powered by RT-Thread

快速回复 返回顶部 返回列表