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

【NUCLEO-U083RC评测】⑦RTC&STANDBY WKUP功能及功耗测试

[复制链接]
小萝卜啦啦啦 发布时间:2024-5-31 00:04
上一篇简单配置了一下RTC,调用了一下设计及获取时间日期的函数。RTC在低功耗场景下还有一个功能就是作为一个低功耗唤醒源头,今天我要尝试进入standby模式,然后用RTC定时唤醒/ ?" C3 a" Y& E+ j. Z5 Z8 c3 Z5 `

, |& Z3 B/ Y7 }- c# P+ }+ X# U1 g; p
工程的话我就沿用上一篇RTC的那个工程了,只是需要把while1中调用的测试函数全部去除,让while1为空
1 m0 ^' y: e, F' i$ K/ }
4 a. A4 u) a+ A9 r
- I: i$ W" h1 ~' b! y9 |一.CUBE修改! t( M2 f* ?: F+ g; u$ F8 ?8 {
来到RTC这里,把WeakUp打开,选择Internal WakeUp
2 Y% D" P# I1 g0 T

  X2 ?# W! E: ]  N下面的参数配置
9 @( F) A9 y& ]1 T4 K; j0 DWake Up Clock是唤醒用的时钟源,可以是RTC CLK的2/4/8/16分频、1Hz、1Hz with 1bit added to Weak Up Counter。我这边先选择8分频,这个可以根据实际情况选择
' e" P+ f/ F1 f" h# w9 V6 z# O  |; C6 {" O) t
然后第二个Counter参数与定时时间的关系是
" `) x, R/ j4 F2 w4 f% u1.如果选择RTC CLK的分频:Counter = 定时时间(S)* (RTC时钟 / 分频系数)
4 k- c- R4 W" D2.如果选择1Hz,那Counter = 定时时间(S)(看名字应该是这么回事,但是我没有试过,不敢确定)* ]- }- }, ]9 |* _1 H/ Y
3.如果选择1Hz with 1bit added to Weak Up Counter,这个情况我还没搞明白,主要是不明白“1bit added to Weak Up Counter”是个什么意思
4 K; c9 A( }7 H; K) X8 q; t; s8 ]8 ?
我选择的RTC CLK 8分频,定时时间为5S,所以counter = 5 * (32.768k / 8) = 20480  ?( L$ k4 C" K* J
4 ]# ~8 a" j' B9 A7 \8 P
第三个参数同第二个,是时间到了后的自动重装载值,为了保持定时唤醒,我就把这个参数和第二个参数一样( C4 Z  d( n8 k$ x( x. n- p0 z
2.png
  @  f/ t$ H! a# ~

3 ?+ Y5 l4 n1 I7 v
然后把中断打开
1 B# |1 B+ W) c9 `  q

" {) d  U; s/ n& @" B8 w9 {
3.png
3 [. D5 ]/ \6 T: f+ q

  d5 k% w% A1 e6 g
最后Project Manager中有一个选项是把所有没有用到的pin叫配置成analog,这个可以避免没有使用的引脚但是外部接了东西,导致的漏电,从而测量功耗偏高

# o7 k9 c" v+ J4 h7 R. R
4.png
4 C  Y+ `. f5 w( ?% `
# Z0 W( @" R. H2 t1 q, Y
最后生成工程(图略)

% f% P# A7 n0 N# ^- ]3 }5 R8 Q7 D: K  S) X' U) t% p( \" l& q* L8 z& W
二.代码编写

6 E/ l' U( V) _
这次的代码修改很简单,先对cubemx生成的RTC的初始化函数做一下修改,如下
  1.   if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)
    , S0 r+ |! N/ U9 r- m( E
  2.   {
    - e5 W# ^  |; v  D7 B
  3.     return;, J3 @. V$ l* _  m
  4.   }
复制代码

8 P/ c( k  n6 z7 H' o" y( n
5.png / Z; Q& c* q9 J; f$ |8 z
如果本次唤醒不是从standby唤醒的,那我就让他向下运行去初始化RTC,反之直接return,这样就不会因为跑了RTC初始化函数导致RTC中的时间和定时被重置。(其实还有另一种方法,会更加准确,那就是使用后备域,这个在standby下也是不掉电的,可以在rtc初始化完成后写入一个值,然后在RTC初始化前读一下,我这儿偷懒了,反正这样也可以实现我的目标)
# V( Z% T0 u5 q* o0 x, r9 V5 G1 U5 D( k2 r! {

* @5 t! G  ^3 s# w1 {9 @7 K  ^- c' z
在while1前面加如下代码
  1.   /* 是否为首次上电 */+ Z9 x! q9 s! |: |
  2.   if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB) == RESET)8 `) S( M3 p! e. Q0 P
  3.   {
    0 r4 n& M5 a3 _( C
  4.     printf("normal run\r\n");
    2 R2 n$ x3 t' c
  5.   }
    ) f/ o, t7 j( K
  6.   /* 从standby唤醒后的复位 */+ C0 _7 w+ T- r6 {
  7.   else  b. X' e( c# C4 i
  8.   {, [" F+ k6 ^: o0 S1 y2 X
  9.     printf("wkup from standby run\r\n");
    ( b( D, t. |1 o7 O# w2 |) @  o6 Y
  10.     /* 清除standby的标志位 */' M6 S, q: ?/ K! \3 J
  11.     __HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB);
    ' S5 p/ v9 \6 Q1 F  o
  12.    
    # g* B; {; c+ ~, A
  13.   }
    ; b! {+ _9 l; g1 g( h1 J( A
  14.   /* 打印RTC时间 */  B* H) Z' w  Q. b
  15.   print_rtc_data();1 [" P5 u# _' n* Z
  16.   /* 进入standby模式 */6 W3 H1 n6 @1 M: T- n3 E3 R6 R7 @
  17.   HAL_PWR_EnterSTANDBYMode();
复制代码
' z9 w; ]4 m% |0 k5 @% M1 f+ Q; k

- S# F; L# }" H. U( A
6.png
  J. E9 `' b. b0 M4 `4 ~& i
简单解释一下,standby就是倒数第二深的睡眠模式了,从standby唤醒后芯片就会reboot,但是唤醒后我们可以知道本次代码运行是因为硬件复位还是唤醒。所以我在代码中对这个情况加了打印,待会儿我们可以看一下效果。
3 M$ E+ j- S7 S6 D. Y) s4 K  K
如果是从standby唤醒的,那就清除standby的标志位(这个如果不清除,等睡下去后会立刻唤醒)

$ z# i* N! n0 R# b
然后不管是从什么状态下运行代码,我都让他打印一下RTC时间,主要是避免RTC时间被重置,最后进入standby
" ]4 `+ ~: L2 d% P! ]5 b# C8 y/ P7 l

! K3 h. A8 Y+ z+ ?
好了烧录,运行,LOG如下
7.png
0 w  s# K2 D2 U& z9 @: x4 A- _
符合预期,首次通电打印normal run,之后每隔5s打印一次wkup from standby run,并且RTC时间也是正常的向后跑
& o& M8 a/ k2 r- s
2 R* z( j" z: r+ K
三.功耗测试

( B- {( E2 b) w' Q( l# L
功耗测试还是用上次LPTIM时用的PPK2

& I9 L% W1 w/ d$ n
JP4供电跳帽调到CHG,JP6-11都去掉(不过这个不去掉也行,我试了不去掉也不影响功耗,毕竟STLINK已经断电了)
) x" o  @9 `3 e# f7 V! D2 v  R' F

9 I* a$ s4 L8 |# k! S; ?
接线如下

- X+ C/ W8 k) x8 p
8.png
  _6 K& Y2 Y6 l1 H; U% C

; Z0 f+ S6 k$ a( L9 B. R: K6 ]
测量结果如下图
. v. }* ?* V) d( o8 g! ^3 e
9.png
4 b- ]# S- Y# V% X- E, v! Z
! f0 n. I# Q5 K/ }4 m
690nA,我已经尝试了很多设置,但是不知道还有什么是没有配置对的(我现在还怀疑STLINK与MCU连接的串口,或者是睡眠时有些时钟没关?),和手册上的160nA还是差了好多,有没有懂行的大佬指导一下

9 M. {/ r' f4 y0 m& U+ ?  v. S# H9 g( q0 Z
最后工程见附件 STM32U0_RTC AND STANDBY WKUP_test.rar (5.23 MB, 下载次数: 0)

3 i$ H! Z7 s" k( b
1.png
5.png
6.png
7.png

STM32U0_RTC&STANDBY WKUP_test.rar

下载

5.22 MB, 下载次数: 0

STM32U0_RTC AND STANDBY WKUP_test.rar

下载

5.22 MB, 下载次数: 1

收藏 评论0 发布时间:2024-5-31 00:04

举报

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