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

STM32G071评测:PWR

[复制链接]
STM1024 发布时间:2019-1-18 16:57
本帖最后由 stm1024 于 2019-1-19 20:58 编辑
8 ~' e$ J% U2 n9 c5 C0 e
. c( k5 u- Q# _9 A8 {8 {) ^5 u花了点时间走马观花的学习了一下STM32G0系列的电源管理,把要点拎出来和大家交流一下。
0 G! D8 {: {! W' sG0提供了7种低功耗的方式,具有灵活的电源管理机制,有效降低了电源能耗,这7种低功耗方式分别是:
  _3 |, }" S4 @  f
  • Low-power run(低功耗运行模式)
  • Sleep(睡眠模式)
  • Low-power sleep(低功耗睡眠模式)
  • Stop 0(停止模式0)
  • Stop 1(停止模式1)
  • Standby(待机模式)
  • Shutdown(关机模式). P/ l6 f; {+ n% R
(如果翻译不对,还望指正)/ N, h, r8 Q/ e" b& ?7 t
G0的电源模型如下:% @7 V4 C- A; P
1.png

3 U' C1 [$ ]8 v0 D( vVDD是主电源,向除VBAT供电之外的所有IO供电,包括Flash、复位、内部温度传感器和内部时钟源等,甚至还有待机电路(包括唤醒逻辑和独立看门狗)。同时VDD也是VDDA,向模拟量外设供电,VREF+是外部参考电压,为ADC或DAC提供参考电压。
1 s# S5 M5 C/ {/ \/ }VDD的电源经过稳压器后,就变成了VCore,这个是给内部的外设、Flash控制器、SRAM等供电。
) V2 N. Q6 |7 eVBAT是电池供电,这一部分是为备份域供电,备份域包括了RTC和备份寄存器等。
8 @. V& J( J/ t
+ ]8 O) K2 P8 E, r0.正常运行模式Range1
  }+ e' [3 J% s4 ^9 Q. T. v这可能是绝大部分MCU所采用的模式:
+ J+ d. }9 [: l# C" {( P+ T& u
2.png
; K2 |4 j# P2 G% b- P1 a2 T4 @
在此模式下,且系统时钟为64MHz,所有外设都能被供电。! c5 @7 M: B6 U6 V
0.正常运行模式Range2; C. _, J2 C3 [, Q1 z
这个模式其实和正常运行模式没太多差别:9 f% ^/ `. m( g2 y0 _! `
3.png

& b9 {& E0 |) S( w) @虽然差别不多,但是还是很显著的:此模式下,系统主频为16MHz,Flash不能被擦除或编程。
9 T) t4 g% W% a& d7 y8 X
7 E( J4 I7 z# n& g  X. U
1. 低功耗运行模式
, i9 ^) Q* a/ U# }: T3 v
4.png
* M! G+ {+ o' K5 N" G
此模式下,主频被限制在2MHz,主稳压器被关闭,由低压稳压器供电,所有的外设可被供电,但是,不能通过PLL倍频(都2MHz了……)) S( M' M3 |; s/ n# b4 u
' z8 E( \; l: i! n5 \! X, t: e0 Y( Q

2.睡眠模式5 E% b  Z- E! W
睡眠模式同样包括了Range1和Range2:
: _: L7 d# Z: y5 J9 D" Q2 f, V! s
5.png
: L/ E4 m; z/ P& B
( Z3 w% Q" B- V% c) M
6.png
- X2 |, T/ d# {' J% ]# a1 L
Range1和Range2的主要区别与正常模式下Range1和Range2之间差别类似,即主频、Flash能否被擦除/编程。
2 G7 K" x0 b: U睡眠模式主要指的是ARM CortexM0+的内核进入Sleep了。7 R0 N) f6 K- A


% g; X( _4 c# l& y1 `; q; a# `3.低功耗睡眠模式
0 R9 P4 T( v4 p
低功耗睡眠模式.png
; A) [2 e* v. Y2 k/ U8 E
此模式下,主频被限制在2MHz,ARM CortexM0+的内核进入Sleep,Flash也被断电,但外设都可以被供电。  k7 F# o0 d# z  i9 m3 g
8 a3 `  B& l" i8 u. F, h& \

4.停止模式0- I: m' Y- {; W6 E
STOP0.png
' @: ^2 [: }8 W2 h7 T
以此模式为分界线,外设和时钟源已经不再是都可以全功能运行,因此也要留意能唤醒事件有哪些了。
2 I4 E+ T- t2 ?

: F$ N( }9 i" [6 f5 J. q5.停止模式1
- u$ O+ m2 F# C" K* w
STOP1.png

" m7 g  [3 E5 t1 O, Q3 {; u+ K! F停止模式1和停止模式0很类似,但是稳压器用的是低压稳压器,虽然功耗比停止模式0低,但是唤醒时间也会长一些。
; g8 y8 j) c+ s0 T9 k

' E1 ~3 G7 h5 l& v1 R. e/ Q6.待机模式
2 z9 d! B% u8 g' d8 [4 O4 K4 ?
STANDBY.png
/ r6 c% b6 {1 `7 b* U* {$ p
. A0 Z" ~% s  T, @! d' I& @
ssss.png

- i* E0 `" u/ {& W0 x2 l  `停止模式可以保持SRAM或不保持SRAM,不保持SRAM的话,SRAM的时钟就被关闭了,肯定功耗低。
6 |. b& Y5 h' H, p  S! S

8 p) W- _! X6 [# b7.关机模式9 _' Q7 X- x7 w; E9 X
Shutdown.png

6 G" V% A% o( d/ Z+ U* j这个最省电了,所有外设全都没电了,内核,Flash、SRAM也没电,可以说,除了备份域,其他都没戏了,所以也只能靠备份域唤醒。7 v! z9 @$ t) h% C, l! Y2 u6 ]% N2 I


5 F2 @- w0 |" @测试
! u0 r+ v/ V7 L) O5 e最后,talk is cheap,废话了这么多,直接上代码:
8 M# h3 b/ Z( U, y
  1. int main(void)4 D& U4 V, n0 P3 ^$ ]) B  ^
  2. {
    , A" J# X$ k. B+ s0 p& K, ?
  3.   HAL_Init();% H- V3 f2 p' m, B$ b- t
  4.   SystemClock_Config();
    1 `: Z' m/ G) p5 k
  5.   __HAL_RCC_PWR_CLK_ENABLE();
    3 v4 U- A" v7 C, ~7 A' a0 y6 c

  6. % F( u/ m. C9 W
  7.   BSP_LED_Init(LED4);
    , Q5 ]2 e5 T" [
  8.     BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI);6 C* G  _  ~% Q/ |% M
  9.   __HAL_FLASH_PREFETCH_BUFFER_DISABLE();6 {2 @# a1 H6 l% h+ x
  10.   RCC->IOPSMENR  = 0x00u;
    + x7 P% l. z- _# \% h" ?. V
  11.   RCC->AHBSMENR  = 0x00u;. R; ?+ M. C3 O+ U; j
  12.   RCC->APBSMENR1 = 0x00u;
    ! M7 ^6 \4 {5 K5 Y2 w* K2 y$ }
  13.   RCC->APBSMENR2 = 0x00u;* q: ~, [$ F0 T8 x
  14.   while (1)
    ; G5 h2 K8 c0 m; B+ ^5 H0 y
  15.   {' ^# h+ F( ?* p4 A2 j. Q
  16.     HAL_Delay(5000);
    ' ?5 A/ ^2 h4 t# W
  17.     HAL_SuspendTick();   
    ; E& p4 B( Q( ~: j$ D  G
  18.     HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);) h* A9 I8 P6 d" V' f8 W
  19.     HAL_ResumeTick();
    + P% e8 n: w5 m5 y, p- F: o
  20.     BSP_LED_Init(LED4);
    7 `* ]8 l6 y6 |; O3 I/ f. h
  21.   }
    1 u1 G3 V! `: C+ p& \$ |. ?( e
  22. }
复制代码
可以通过ST-Link Utility看效果,记得把实时更新打开:9 \* H. a/ Y7 x% s
33.png
: u) w, R: Y6 `
进入了Halted模式,应该就是Stop模式了。(上面配图有误,更正一下)" m( ]& L& h2 F, B! R- q  k
按一下蓝色小按钮,唤醒:, h8 x  |6 m7 ^% @- }( c# L$ V( E
66.png
) x" @5 @/ B/ B' ]; \& r% ^
嗯,又跑起来了,灯也一闪一闪的了,不过似乎要比第一次慢(不信就把Reset按一下)?
" Q0 W5 f' D3 b, b& E/ G7 b6 p慢就对了,因为现在用的是低压稳压器,主频被限制在了16MHz。
* v6 o0 P+ {- Y* G; d3 e$ Q) g! g  ?% a- v2 m0 X
祝大家周末愉快~
收藏 1 评论1 发布时间:2019-1-18 16:57

举报

1个回答
slotg 回答时间:2019-1-19 15:31:43
很不错的分享
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版