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

STM32G071评测:PWR

[复制链接]
STM1024 发布时间:2019-1-18 16:57
本帖最后由 stm1024 于 2019-1-19 20:58 编辑 # K$ g4 k- l* i! z
  U0 m6 L" ]) q3 w+ ]1 W% a
花了点时间走马观花的学习了一下STM32G0系列的电源管理,把要点拎出来和大家交流一下。; p& d  D0 a8 ^$ ^7 ?5 C0 D( O
G0提供了7种低功耗的方式,具有灵活的电源管理机制,有效降低了电源能耗,这7种低功耗方式分别是:8 a+ S$ [0 c) b
  • Low-power run(低功耗运行模式)
  • Sleep(睡眠模式)
  • Low-power sleep(低功耗睡眠模式)
  • Stop 0(停止模式0)
  • Stop 1(停止模式1)
  • Standby(待机模式)
  • Shutdown(关机模式)+ `5 W( y) d$ N! o
(如果翻译不对,还望指正)
2 {; g: k7 U4 j, {4 q  RG0的电源模型如下:
6 s1 k& j+ ~+ X6 \9 F
1.png
! R8 h3 o& c+ B' }- I3 r6 ^
VDD是主电源,向除VBAT供电之外的所有IO供电,包括Flash、复位、内部温度传感器和内部时钟源等,甚至还有待机电路(包括唤醒逻辑和独立看门狗)。同时VDD也是VDDA,向模拟量外设供电,VREF+是外部参考电压,为ADC或DAC提供参考电压。
! ?: Q9 P% n/ V) zVDD的电源经过稳压器后,就变成了VCore,这个是给内部的外设、Flash控制器、SRAM等供电。
3 u& G  J( p' Y' w7 H0 n# |VBAT是电池供电,这一部分是为备份域供电,备份域包括了RTC和备份寄存器等。' o: s0 ~- \6 U% v
* Z- E1 W3 v0 z0 y
0.正常运行模式Range14 B& W1 m2 W2 u7 Y/ z
这可能是绝大部分MCU所采用的模式:
* z3 q* W' c% i% [, w- x
2.png

- a, y* f' b0 G% j0 I; Z9 f) N! h/ n在此模式下,且系统时钟为64MHz,所有外设都能被供电。
7 J/ X- J7 |5 ]0.正常运行模式Range2
, s' ~+ O' K8 P1 [  K4 r这个模式其实和正常运行模式没太多差别:
' }8 r8 ~/ S- j+ G
3.png

, I% P, W- T2 w5 p# ^虽然差别不多,但是还是很显著的:此模式下,系统主频为16MHz,Flash不能被擦除或编程。 + D7 T3 X2 f0 Z5 O$ a0 O


! I$ p' k2 ]- @& k- \/ N1. 低功耗运行模式( ^, K$ B4 w3 l! q- M0 l* y
4.png

( d) l+ a: f8 O7 x2 }  K; [$ p0 C此模式下,主频被限制在2MHz,主稳压器被关闭,由低压稳压器供电,所有的外设可被供电,但是,不能通过PLL倍频(都2MHz了……)
" i9 R' E2 U0 u" ^3 _+ N  @ " k$ H& G8 ?" j3 t

2.睡眠模式8 }" X8 f+ i3 J+ X& g  l( y
睡眠模式同样包括了Range1和Range2:& P! r" W$ y* c3 T: {! u0 H
5.png

" z2 Y! Q+ O2 W9 _. M4 Q( T. I
2 e9 x* ]* n4 h* M! S+ s, t/ b
6.png

. ~' _4 O5 i2 u) ]) N. xRange1和Range2的主要区别与正常模式下Range1和Range2之间差别类似,即主频、Flash能否被擦除/编程。
8 }/ J$ P3 g, V9 J8 a' h! `! @* o" C' B睡眠模式主要指的是ARM CortexM0+的内核进入Sleep了。% A) r3 e( C: T/ O


& |; H8 U+ v4 N1 N& Q  a9 {3.低功耗睡眠模式
' r; f% x8 D+ I0 ^- w& d( y
低功耗睡眠模式.png

0 g) L3 \: I9 z) ?此模式下,主频被限制在2MHz,ARM CortexM0+的内核进入Sleep,Flash也被断电,但外设都可以被供电。! h6 E8 F* x$ K9 g" |
/ H# g9 G( X' e$ @. Y. l* M

4.停止模式0
, M) d$ i# k: }% q! v
STOP0.png
8 R" W4 S% G$ A. e/ {3 z1 e' U
以此模式为分界线,外设和时钟源已经不再是都可以全功能运行,因此也要留意能唤醒事件有哪些了。 6 v! E3 Q9 |# N: s

, N( \7 O/ k5 b& U4 U  w( q& {
5.停止模式1( g6 r" ?+ ?; N0 a( H+ v6 q' W4 [8 q
STOP1.png
, ]& {) Q+ x% M3 D; F
停止模式1和停止模式0很类似,但是稳压器用的是低压稳压器,虽然功耗比停止模式0低,但是唤醒时间也会长一些。
7 x* E# e1 ^" x/ W: S
% ^' A' c+ E0 @9 K& t
6.待机模式
" L( c/ L- b# S* j# d
STANDBY.png

. E' }7 ^1 U8 K' y6 B% c4 P6 h. q) C" S& d5 \  y
ssss.png
) z' _( U. i" {* C4 `
停止模式可以保持SRAM或不保持SRAM,不保持SRAM的话,SRAM的时钟就被关闭了,肯定功耗低。 0 |! @2 ^* R# C* J2 t2 ]/ J


! T* K/ X3 ~0 C7 V- C7.关机模式
3 \: \0 T, e3 X( M* M5 p6 y
Shutdown.png
6 D8 b2 ], Q2 @8 b2 o
这个最省电了,所有外设全都没电了,内核,Flash、SRAM也没电,可以说,除了备份域,其他都没戏了,所以也只能靠备份域唤醒。; B  D1 H* m1 ^  n7 k

: M* }5 q- t* ~; \3 \+ U
测试
% v0 k! C; T1 {/ w- W) B( m. h最后,talk is cheap,废话了这么多,直接上代码:
4 `1 m! u* ]# h3 P& B
  1. int main(void)5 w- c( _2 _0 p6 j
  2. {8 `5 M6 }$ F$ J9 W
  3.   HAL_Init();
    3 f. N, e* ]5 M8 O) p/ c
  4.   SystemClock_Config();  j' [& M4 m' N7 ~3 m; [
  5.   __HAL_RCC_PWR_CLK_ENABLE();
    & x8 ?) i) p$ V4 ~' v5 f( d( T7 g4 E
  6. ! F, s# X* P7 n+ e+ S
  7.   BSP_LED_Init(LED4);
    " ^! Y5 y6 a8 `9 C+ w
  8.     BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI);* X6 G* ~' |9 S7 x& `
  9.   __HAL_FLASH_PREFETCH_BUFFER_DISABLE();
    / ~) i* ]9 e: `2 W
  10.   RCC->IOPSMENR  = 0x00u;( s! e7 V; w. H+ K- m' j
  11.   RCC->AHBSMENR  = 0x00u;) D  t: F( k$ {$ w
  12.   RCC->APBSMENR1 = 0x00u;/ W3 {8 g# _, E6 |7 u6 T
  13.   RCC->APBSMENR2 = 0x00u;
    ; w$ y" T# T) [; R) k/ h
  14.   while (1)) K# M5 h- q+ @9 ]4 C
  15.   {& D* v) N, U3 t6 w2 P* z' M
  16.     HAL_Delay(5000);
    ) ^0 q6 H$ h0 B5 S# z- Q- ^/ D
  17.     HAL_SuspendTick();   
    ! S$ g% G' C  I5 |* f' u
  18.     HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON,PWR_STOPENTRY_WFI);
    9 b  w  M0 E' G( V  m& P+ q
  19.     HAL_ResumeTick();7 D- I+ q& D# L7 q
  20.     BSP_LED_Init(LED4);
    2 T6 l! t  t8 e( m+ Z
  21.   }; E6 m/ }; C+ u6 c
  22. }
复制代码
可以通过ST-Link Utility看效果,记得把实时更新打开:
' W/ @1 O) d/ w9 [
33.png
) I2 V, h5 s! r/ V4 h- S( A
进入了Halted模式,应该就是Stop模式了。(上面配图有误,更正一下)( j+ i% Y, S5 d9 K% }
按一下蓝色小按钮,唤醒:( ?# {+ w% b! z
66.png

- ^# K: _/ B3 M) i, t嗯,又跑起来了,灯也一闪一闪的了,不过似乎要比第一次慢(不信就把Reset按一下)?$ s8 J4 T) v9 i+ S
慢就对了,因为现在用的是低压稳压器,主频被限制在了16MHz。
8 I0 M2 Q) R: g7 e: d
8 `5 K1 _: j% q& H7 a5 t; {祝大家周末愉快~
收藏 1 评论1 发布时间:2019-1-18 16:57

举报

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