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

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

我前两天在调试stm32l476的低功耗问题。发现一些问题:) r* h5 }7 o0 P5 X# ~
     1.我在裸机情况下,STOP2模式的功耗是1.5uA;: J0 I6 @7 j, }+ {) T; s' j3 b0 Q
    2.使用RT-Thread的pm组件时,STOP2模式的低功耗为30uA左右,还不断的浮动。
* |0 z! ~* u" c: `3 u* ^; T    其中,在使用PM组件时,我已经把systick 、lptimer 及所有的IO的时钟都关闭了。
$ ]6 ?, ^' t$ x/ C* R, h$ L   不知道哪里还有功耗。想搞清楚使用PM组件时,是哪些功能增大了系统的功耗?求解答,多谢!, J3 r0 j/ W, R( B1 _
  k+ w+ q* r6 u# J  `/ y, t6 H
: S- g" q' ?* w9 C7 ~+ C2 v: p, `
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 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
6 G/ j  y8 D4 \0 x芯片级的处理,裸机和 RTOS 都是一样的,比如同样的STOP2 模式,不应存在差异,当你关闭了systick , lptim ...

$ R) l' C* y# r' o7 ~: I7 D. O9 H) \1 i               __HAL_RCC_USART1_CLK_DISABLE();9 b: S5 G2 ~0 ?+ P
# f/ q5 z  i7 \7 |# L/ s- P
                __HAL_RCC_GPIOA_CLK_ENABLE();
  ~9 x  j: E3 c/ ~2 a. B                __HAL_RCC_GPIOB_CLK_ENABLE();
3 o$ ?* m7 m' J' {7 m                __HAL_RCC_GPIOD_CLK_ENABLE();' U4 J& ~2 S7 H
                __HAL_RCC_GPIOE_CLK_ENABLE();
' c' x. ~: j% I0 H: B% o                __HAL_RCC_GPIOF_CLK_ENABLE();
, A' ?. q6 t5 l                __HAL_RCC_GPIOG_CLK_ENABLE();1 y1 b. @2 o, i# w
                __HAL_RCC_GPIOH_CLK_ENABLE();   
7 X: E6 N6 i: k$ X
# Y7 f; _2 v" b7 f' z0 T4 _3 b                GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;/ K& \1 U5 W- g/ _
                GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;3 G# E# d/ C8 h3 \3 L
                GPIO_InitStruct.Pull = GPIO_NOPULL;
( ~2 J' f1 w: Q8 y                GPIO_InitStruct.Pin = GPIO_PIN_All;
, D' a/ v. r6 f" h6 b0 y: d- v7 U1 l* Z6 _+ _% r) R
                HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);# ^; \, A3 I; y7 m8 e5 P
                HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
; Z3 y- }+ a6 Y2 l( x                HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
% K  I. y0 F; d2 L2 o- P+ u                HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);1 c' l: D; J! Q- B
                HAL_GPIO_Init(GPIOF, &GPIO_InitStruct);, N0 P; b$ j# }. R6 Y
                HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
% x6 M. M* y8 \                HAL_GPIO_Init(GPIOH, &GPIO_InitStruct);  
$ A( o0 |" Q% ~+ o6 z! C- I2 Y: T
+ R# O7 n7 V4 R4 L! L                __HAL_RCC_GPIOA_CLK_DISABLE();- }6 a6 N# C9 U  ?) k6 m7 l3 h
                __HAL_RCC_GPIOB_CLK_DISABLE();/ Y0 b9 o; ^0 X5 c4 r2 P' L
                __HAL_RCC_GPIOD_CLK_DISABLE();
  ~  c0 N, R. a* J                __HAL_RCC_GPIOE_CLK_DISABLE();6 u) k3 w& m% R: |& R
                __HAL_RCC_GPIOF_CLK_DISABLE();
; J8 e" k$ A# q9 I8 N. c, b. I! Q                __HAL_RCC_GPIOG_CLK_DISABLE();
3 D- r# G6 i$ k% F: r. {" u0 ?2 M                __HAL_RCC_GPIOH_CLK_DISABLE();
# k- k$ I: \/ b0 e! z% N" F                4 ^" K" E. M# @7 P- W) x* {
                SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |1 z; w$ Y, ]+ Y: `; Y+ Y
                   SysTick_CTRL_TICKINT_Msk   |
" E. C5 W! C9 r* H& d5 x# Z                   0;//SysTick_CTRL_ENABLE_Msk;  ! Y* O7 b5 k. `) M) m7 w# T7 V
6 n- q. J8 `8 e4 S6 x
                __HAL_RCC_LPTIM1_CLK_DISABLE();  ?0 l" j3 b# a! Y
/ `2 W  j+ a4 x
上面是我进入STOP2模式之前的操作,首先,关闭串口和所有IO口的时钟;然后,关闭systick的时钟;最后,关闭lptime的时钟。现在所有的外设的时钟应该都是关闭的。
2 K( m& h6 o1 I: S
* ?7 y; X9 N4 g" u$ c9 V- s3 `
使用道具 举报 回复
发表于 2019-4-29 13:57:04 | 显示全部楼层
本帖最后由 水清沙白 于 2019-4-29 14:02 编辑
1 }: @3 @& S9 l3 D9 r  k1 t$ ]1 L0 g
最近刚好在调试 STM32 L476 的低功耗,外设的处理很重要,根据外围电路来确定,该输出高的输出高,该输出低的就输出低,不然会导致漏电。
0 j1 P: Z& C) y
: U0 i% [3 q- z4 e4 e如果是 L476 的 Nucleo 板子,PC13 用作输入唤醒,配置浮空输入,下降沿中断:
5 g/ o  X3 T$ F, J& B: X. i, {+ b+ P/ k* J, j/ F3 I
```
6 x  d. N9 d+ e+ b    rt_pin_mode(WAKEUP_PIN, PIN_MODE_INPUT);
0 `( u; y. E. d: \" l/ T    rt_pin_attach_irq(WAKEUP_PIN, PIN_IRQ_MODE_FALLING, wakeup_callback, RT_NULL);
  @" H2 k# G$ E    rt_pin_irq_enable(WAKEUP_PIN, 1);$ k# w. Q; s+ m5 d6 |5 m
```- W6 Z1 Z1 s" \) h, ]6 ~  }

' n3 ^  b$ n! X这是我在 RTT 上测试的功耗,1.5uA左右。
8 U7 c6 ^' f# t6 o- D0 j  D 微信图片_20190429135606.jpg ' v/ g) E  a" M
使用道具 举报 回复
发表于 2019-5-17 17:48:37 | 显示全部楼层
多谢多谢,对我很有帮助
使用道具 举报 回复
发表于 2019-9-18 22:07:27 | 显示全部楼层
水清沙白 发表于 2019-4-29 13:57
: ]% x* y  Q. q最近刚好在调试 STM32 L476 的低功耗,外设的处理很重要,根据外围电路来确定,该输出高的输出高,该输出低 ...
0 {* p4 L* @1 P( h
你好,可否把你测试的工程代码传上来,我发现潘多拉开发板里面的pm例子不能正常的进入低功耗,想查一下什么问题
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  1. 1 主题
  2. 73 帖子
  3. 73 积分

Ta的主页 发消息

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

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

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

Powered by RT-Thread

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