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

【经验分享】stm32l0 rtc休眠周期自动唤醒文档整理

[复制链接]
STMCU小助手 发布时间:2021-11-16 00:27
一、周期性自动唤醒--手册文档说明2 t/ F4 K0 Z) C1 F
% V8 i- \0 i7 B+ m: {7 Q! n
周期性唤醒标志由 16 位可编程自动重载递减计数器生成。唤醒定时器范围可扩展至 17 位。
5 r" D: v7 r% C/ ?) c$ W2 I! e- ?5 I7 l0 T9 R9 `
可通过 RTC_CR 寄存器中的 WUTE 位来使能此唤醒功能。
2 k+ D. ?, o, }7 I! ~) a. ^0 H2 o$ p+ ?  O. y5 _
唤醒定时器的时钟输入可以是:  2、4、8 或 16 分频的 RTC 时钟 (RTCCLK)。
' m3 L& [! u6 F) |8 }0 i5 G* D% V9 j0 I3 c$ Z' _' W6 P
当 RTCCLK 为 LSE (32.768 kHz) 时,可配置的唤醒中断周期介于 122 µs 和 32 s 之 间,且分辨率低至 61 µs。
( Q8 `2 V7 [; c
% P2 ]( `/ K6 o, a0 M: U· ck_spre(通常为 1 Hz 内部时钟)。
) M8 x0 I' q8 {; H8 i3 z" r
, b8 o+ e- V5 n6 x/ n* v: D当 ck_spre 频率为 1 Hz 时,可得到的唤醒时间为 1s 到 36h 左右,分辨率为 1 秒。这 一较大的可编程时间范围分为两部分:
' R3 \( y( R& g! U8 q- X% p
" O& R0 t2 j2 W4 H1 g3 f2 ?– WUCKSEL [2:1] = 10 时为 1s 到 18h
2 q6 r( z5 A6 k# g5 n1 C8 d' Y; B7 W% Z8 P- H, y. X! U' p- r
– WUCKSEL [2:1] = 11 时约为 18h 到 36h。在后一种情况下,会将 216 添加到 16 位计数器当前值。完成初始化序列后(请参见第 600 页的编程唤醒定时器),定时 器开始递减计数。在低功耗模式下使能唤醒功能时,递减计数保持有效。此外,当 计数器计数到 0 时,RTC_ISR 寄存器的 WUTF 标志会置 1,并且唤醒寄存器会使用其重载值(RTC_WUTR 寄存器值)动重载。 之后必须用软件清零 WUTF 标志。
% @2 r9 K# k8 a% j: |, W; c' N8 E! {( O) `8 v. J  i
通过将 RTC_CR2 寄存器中的 WUTIE 位置 1 来使能周期性唤醒中断时,它会使器件退出低功耗模式。. r& [* L% ]: h
4 t; y! R$ `% O, O( t
如果已通过 RTC_CR 寄存器的位 OSEL[1:0] 使能周期性唤醒标志,则该标志可连接到RTC_ALARM 输出。可通过 RTC_CR 寄存器的 POL 位配置 RTC_ALARM 输出极性。
. p. Y, i8 Z6 N% L# X7 g/ T. F- C0 T
系统复位以及低功耗模式(睡眠、停机和待机)对唤醒定时器没有任何影响。. o( P! H$ \: T% B% o9 a
/ Y7 y2 s( A& |, z% M
二、配置周期唤醒

8 c+ S: _* k1 G, G9 j+ {, G
/ [$ N: [, P8 y: |0 B! Z配置步骤如下:
% ?. L* T& R" A$ {; }+ X
$ ?/ W, F: }7 Z  y: Q! J% g7 ]1 A; R1. 禁用周期唤醒功能,复位RTC_CR2中WUTE位;
5 u$ u) D$ z# f! d1 s% {
$ ?8 I5 K0 C1 a' f2. 等待RTC_ISR1中WUTWF位置位,表示唤醒计数器可配置;
. Q$ W1 Q3 h+ n, I
; {) d5 V8 P! S- l% _3. 配置唤醒时钟,设置RTC_CR1中WUCKSEL[2:0]位:
7 F5 |3 M7 J( s  d) u- g  P8 F: G, X& ]& S0 u7 S+ r
- 000: RTCCLK/167 {3 g5 f( S$ n9 W# m1 H, [

9 u$ v1 U8 ]: f1 t& z$ N- 001: RTCCLK/8# s( J+ L" y* ]( O+ i
; x9 o- S/ K; E; m. l9 v
- 010: RTCCLK/4* M7 o, p. T3 w
2 z- y& e* \4 {: m3 D' b% j
- 011: RTCCLK/20 h$ I: V  U0 i9 o1 @

- x5 B1 E0 C# n: o- 10x: ck_spre(1Hz,WUT计数范围:0x0000~0xFFFF)
" z( ?: F" ~$ z# A' n$ C
/ o% e' _* R- e4 F3 Q7 q  C- 11x: ck_spre(1Hz,WUT计数范围:0x10000~0x1FFFF)5 H5 P9 k5 [" P

3 F! R/ I4 w3 G# B+ c9 d, r4. 配置唤醒周期,装载寄存器RTC_WUTRH和RTC_WUTRL;6 Y- Q) W3 L# K! ~9 j

8 Q  O: T: L% K6 B* e* X2 d5. 使能周期唤醒功能,置位RTC_CR2中WUTE位。(该中断会使MCU退出低功耗状态,进入运行状态。)4 L3 P7 E! X( D

1 H1 Y; V" {; a; l3 FRTCCLK,预分频2,4,8或16。如果RTCCLK为LSE,即32768Hz,则可配置唤醒周期为:(61us ~ 32s)0 O+ h- z! a& f9 O/ @6 j
! s$ l5 _4 ^: h7 A! E4 G, @
20190814171352973.png
2 Q/ i3 P! k; u; ?) @% h, f! Y
4 e0 y7 D  Y6 W+ M3 p
ck_spre, 1Hz时钟,则可配置唤醒周期为1s ~ 36h)! `2 I: U# N# M! j5 \

' X2 f( I/ v- Z" c
20190814171403618.png
8 ?+ M; E) W( \- I( j& E

  H! Z  j6 c% N' m2 t三、RTC时钟配置  V: N2 E4 e4 `

7 I# d. z- |( w& h3 g- e: P* t3 v1、时钟源选择:RTC时钟源可选HSE,LSE,HSI或LSI。9 m$ a: M8 g3 D/ O% J  }

* @% A) d9 O6 V* |: i4 N# _2 D为确保RTC精确工作,要求系统时钟(SYSCLK)必须等于或大于4*RTCCLK值。如果系统时钟(SYSCLK)为LSE或LSI,则RTC时钟必须等于系统时钟(SYSCLK),并且禁用RTC同步机制(置位RTC_CR1寄存器RATIO位)。
: F2 V; V' d- q. b
+ J4 A% i3 g0 B6 \+ H2、配置RTC时钟源:配置RTC时钟源为LSE,1分频,即32768Hz。
7 ^' d: h- E; w' f' M2 D% ^8 [: P4 D- \& F" n" s" a2 v- X
3、配置ck_spre时钟; ck_spre时钟,默认1Hz时钟。$ X( `+ Y! h9 P, F0 I" Q

! n9 }! A7 a2 o! ?# p5 j(1) 设置7位异步预分频,RTC_APREGREDIVA,默认127;
& Z1 W7 U) ?' a8 {$ d  F2 t9 v, d( h9 y: k, |& ~* U" q
(2) 设置13(Medium)或15位同步预分频,RTC_SPRERxREDIV_S,默认255。5 p2 j* n/ B$ v
7 U# w9 K" h' Y0 x" _7 M& \1 s
20190814171418490.png
; i! V  U4 f4 i) s
4 b: Z  K; d4 u! r$ S4 m8 `0 B
即:1Hz=32768/((127+1)*(255+1))2 I' N* Q& K5 d" y+ i
ck_spre时钟可用于日历和定时唤醒时钟。
: e) z/ N, y, b$ H& u2 ]
3 d) O4 M  Z( ], T9 |" _代码参考
8 Z6 e$ b. g) E  ]+ ~& Q3 S//参数time 秒0 [3 l0 |; {: q% C5 k

* n; d2 Q( D! X8 o& a
  1. void APP_EnterLP(uint32_t time )( U* o$ m3 S( ]' ?; h

  2. ) m% X. L/ k7 [- I
  3. {
    4 P; S6 P* m; R+ }: i9 i
  4. 4 z0 o% Q( W% \6 N/ g- o% e
  5.          MX_GPIO_Init_stop();
    . }' ~5 W  }5 w3 U/ i& L! Q
  6. - x) a, D$ Z' ?$ _  R' J
  7. /* Enable Ultra low power mode */  Q# n1 L" x$ W+ k( ~$ E- N! f

  8. 6 x: ~" c( B2 p
  9.           HAL_PWREx_EnableUltraLowPower(); //使能超低功耗
    : T, f% A% Z  z: s

  10. / l, ]+ L. m3 x* H1 f. t
  11.           /* Enable Fast WakeUP */6 a" N- o4 T* z( Z: U
  12. . s9 N& b' @$ I, C8 a6 \
  13.           HAL_PWREx_EnableFastWakeUp();            //使能快速唤醒
    - H: q: c, e- L6 c  ~

  14. . R* O5 A! c% e5 P( l) j; g
  15.            /* Disable Wakeup Counter */1 B& C6 |% ^( P6 M6 Y

  16. ' W. r6 W; u8 m! t
  17.          HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
    4 ~9 ~4 F, s% w  l
  18. 9 ?1 l. h% D- a, X! u! W; I
  19. : t! |/ y. r2 i" k+ j1 k. T& y
  20. / |7 B- Y4 y5 W( n, F
  21. & |+ t* |- @6 m7 B* H( K8 N

  22. 5 b" H: M& u0 }( `: S
  23.       /* Clear Wake Up Flag */3 S# V& b% e% v/ M; A
  24. 5 m! W$ r- ]. d2 }$ x' O% U
  25.         __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
    # l+ u/ I" ?* \' Y: F& D$ l# {
  26. - F( W9 j' X& P5 ?9 l3 q( R# `
  27. ) d- F" U! ~6 p- d- _9 F
  28. . N; ]( B8 {& P+ _$ w
  29.     //    HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, (uint32_t)(time * 2048), RTC_WAKEUPCLOCK_RTCCLK_DIV16);//rtc LSE=32.768k   2048Hz   488us-- 32秒
    % l7 {+ a+ D' v1 H
  30. 2 J- U6 s1 T: w- h& _' U

  31. 1 ^% {/ e0 T$ X- w' M+ G1 d/ `9 }
  32. ) g8 s2 _2 Z( P9 }4 V* k1 v
  33.         HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, time-1, RTC_WAKEUPCLOCK_CK_SPRE_16BITS); //wangxl@20190814  时钟选择1Hz  65535/60/60 ~18  可得到的唤醒时间为 1s 到 18h 左右1 i+ Y2 m1 {# X: U$ [

  34. 7 M$ S3 o3 |# Y2 Z0 L" N( _
  35. + }& t6 k  l7 H* X& m6 @

  36. , M7 {6 G" A8 |- x/ C
  37.         printf("进入停止模式\r\n");
    , k" z- }+ o9 i( x& y0 }5 k

  38. 4 U' |/ V" O7 t4 j4 }' X0 o
  39. ) `1 Y+ f4 k1 I" r8 z8 O' s5 O
  40. . a7 ~: ]1 i5 O0 ^2 l! Q# Q  G
  41.         /* Select MSI as system clock source after Wake Up from Stop mode */
    5 C# N3 P! y) h: N3 u% K1 s: q  I

  42. 3 o' h& i" w! v( }
  43.         __HAL_RCC_WAKEUPSTOP_CLK_CONFIG (RCC_STOP_WAKEUPCLOCK_HSI);8 Z3 n: O4 F! y7 H
  44.   o* r& t) `' a0 u: w  J( r% J) i
  45. * q( i* p6 o( b) t  _' D( D$ ^" D
  46. : Q8 R, l; R- M1 h) |, c
  47.         HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON , PWR_STOPENTRY_WFI);8 G% J3 O( Q& @( Y  c9 G5 K

  48. , G: X$ I6 Q- ^. [
  49. 4 K' P# \" d& A
  50. ( O8 [) a6 l7 K0 e7 E) C
  51.         MX_GPIO_Init();8 H) D+ D% B& ]5 h) H. p1 I5 l
  52. ' j5 P4 x3 \1 {

  53. . _" k( B1 [" X$ B$ e: ~
  54. * F$ d# \8 I6 I+ Y; u$ l+ `
  55.         HAL_Delay(5);  //wangxl@20190814  稳定时钟 必免串口打印乱码( v8 {3 V0 z9 R" ^: j4 P

  56. 3 j9 T# M7 o' Z0 Q* g7 h
  57.         printf("wake up\r\n");2 K9 x' x  ?9 q7 g' Z/ }2 k5 Y
  58. + l" q' k/ R2 l, m4 ]
  59. }
复制代码

3 X& y" `" p8 e- E+ g  d4 H3 l9 G
. O  U# G- Y  I9 h7 V4 W, U1 n: Z3 ~6 w. O# b, o
赞 收藏 评论0 发布时间:2021-11-16 00:27

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版