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

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

[复制链接]
STMCU小助手 发布时间:2021-11-16 00:27
一、周期性自动唤醒--手册文档说明
0 Z  I$ y7 e. B* X, x- I4 E' G* W0 {% X" j* Z& X7 P9 V2 Z6 t& [
周期性唤醒标志由 16 位可编程自动重载递减计数器生成。唤醒定时器范围可扩展至 17 位。
% @: v/ G* Y& U# `- D" r6 B. r; c3 e9 K) h* y# w. T% |5 }
可通过 RTC_CR 寄存器中的 WUTE 位来使能此唤醒功能。0 w/ Z! A/ u" T, S0 {- @

: [/ n7 I  W" `9 z" v2 B唤醒定时器的时钟输入可以是:  2、4、8 或 16 分频的 RTC 时钟 (RTCCLK)。, f4 I4 x' n# n, C# d; G. K
6 z; R6 H4 O6 s% Z
当 RTCCLK 为 LSE (32.768 kHz) 时,可配置的唤醒中断周期介于 122 µs 和 32 s 之 间,且分辨率低至 61 µs。
8 p, J0 b* m. t! K; f4 ]
3 [3 S4 Q5 [) b0 y7 o% Z· ck_spre(通常为 1 Hz 内部时钟)。
# _5 I: v; u2 F# z4 ?
4 i  V# K3 K* w& T% x% F当 ck_spre 频率为 1 Hz 时,可得到的唤醒时间为 1s 到 36h 左右,分辨率为 1 秒。这 一较大的可编程时间范围分为两部分:+ Y% r3 s* u8 H5 T

" L1 y5 f8 u/ i) M. Q  Y, L, |– WUCKSEL [2:1] = 10 时为 1s 到 18h
1 c% ^$ N5 t% \8 o6 U) Q3 X, J
# `/ X* O; f; D6 P" p  G% K) S– WUCKSEL [2:1] = 11 时约为 18h 到 36h。在后一种情况下,会将 216 添加到 16 位计数器当前值。完成初始化序列后(请参见第 600 页的编程唤醒定时器),定时 器开始递减计数。在低功耗模式下使能唤醒功能时,递减计数保持有效。此外,当 计数器计数到 0 时,RTC_ISR 寄存器的 WUTF 标志会置 1,并且唤醒寄存器会使用其重载值(RTC_WUTR 寄存器值)动重载。 之后必须用软件清零 WUTF 标志。! ]% x, V/ Z+ B8 r
  z9 r- K! ^1 Q0 F! r  |1 Z5 Y
通过将 RTC_CR2 寄存器中的 WUTIE 位置 1 来使能周期性唤醒中断时,它会使器件退出低功耗模式。
  Q* \8 M) S. l! w; Z8 B! H9 h9 ~: K6 R; }+ N, Q8 c8 |
如果已通过 RTC_CR 寄存器的位 OSEL[1:0] 使能周期性唤醒标志,则该标志可连接到RTC_ALARM 输出。可通过 RTC_CR 寄存器的 POL 位配置 RTC_ALARM 输出极性。$ P, K6 |* Z& p+ `* D8 N

/ }- v8 V8 W4 i2 c7 X系统复位以及低功耗模式(睡眠、停机和待机)对唤醒定时器没有任何影响。" ]' v5 W5 b( q1 ?& |8 W
+ k" Y) k# q; I4 X9 }
二、配置周期唤醒

# _' w, K! Q8 j" F& D7 j9 @
5 a- R- @( ]4 R3 Q配置步骤如下:
; ~6 y8 L* B/ p
, \0 o+ b3 _# J1. 禁用周期唤醒功能,复位RTC_CR2中WUTE位;  f2 p! ~( F0 `; `$ a

" j+ ]8 A' v0 a* @2 j, _2. 等待RTC_ISR1中WUTWF位置位,表示唤醒计数器可配置;$ M" W. z! K* i; f; p3 u

0 j# F( P5 }5 j& O( ^9 ^. ~2 {4 w4 E3. 配置唤醒时钟,设置RTC_CR1中WUCKSEL[2:0]位:
8 P4 G: B' Z- b2 {
8 W; x5 F* ~9 ~8 D/ m( ]; }, j- 000: RTCCLK/163 `( _- }7 ?  d0 c- h/ ?# o! [5 W* x

" j4 T1 O4 Q, O; S- 001: RTCCLK/8
9 b5 [: N, F1 b+ k' D( L- B( v. V, ~5 v6 E5 l, r2 h+ E5 ~5 d
- 010: RTCCLK/4
8 k; {0 \. N9 V( |  R5 l! N$ i! p6 a8 i3 M7 O
- 011: RTCCLK/2# W1 ]" c7 h- `2 i  t; ~# u) W
! P" B0 ]) h+ \1 H! _4 c6 d: M1 o
- 10x: ck_spre(1Hz,WUT计数范围:0x0000~0xFFFF)
* R3 u5 C% m: D
2 j: W' _. ?- l# y' f2 y1 k# w6 A- 11x: ck_spre(1Hz,WUT计数范围:0x10000~0x1FFFF)
# Q0 ~- [% F6 a3 V. U; ~9 J6 z# g2 h, W5 l- e5 v$ S
4. 配置唤醒周期,装载寄存器RTC_WUTRH和RTC_WUTRL;5 j& L* U. C* ]5 ~
8 t4 M) J5 \6 p  ]  r" l& p
5. 使能周期唤醒功能,置位RTC_CR2中WUTE位。(该中断会使MCU退出低功耗状态,进入运行状态。)
" A" B6 {! ~% I* M/ q4 m" f1 q2 x$ O" z( ]# J+ e* t( f$ L
RTCCLK,预分频2,4,8或16。如果RTCCLK为LSE,即32768Hz,则可配置唤醒周期为:(61us ~ 32s)
7 v* X, k+ U. `( V  ]+ U' h1 C: L. L- i- P4 h* B' F! O
20190814171352973.png
( @7 K" Q* Y  E8 _: M

5 y+ p, o3 Y; g# l+ x1 qck_spre, 1Hz时钟,则可配置唤醒周期为1s ~ 36h)
8 W, s  {; Q$ q, ~% q
4 t: m& b5 V* Y) X' W/ ?
20190814171403618.png
/ a; n9 I6 A5 q# Q8 S, T) u( ^
' Q0 P0 ~( }2 p7 O& C
三、RTC时钟配置  B# l3 K, Q# p& B
# s$ u& Y1 ?! _
1、时钟源选择:RTC时钟源可选HSE,LSE,HSI或LSI。
- R) _0 j" f( t
/ }( B; [+ [9 w8 P" s为确保RTC精确工作,要求系统时钟(SYSCLK)必须等于或大于4*RTCCLK值。如果系统时钟(SYSCLK)为LSE或LSI,则RTC时钟必须等于系统时钟(SYSCLK),并且禁用RTC同步机制(置位RTC_CR1寄存器RATIO位)。
+ D' _6 w( k' j+ X) Y/ h6 a& {3 q+ ~. G2 K- b: X
2、配置RTC时钟源:配置RTC时钟源为LSE,1分频,即32768Hz。
8 l! o; x, z# c1 B) ?, L. y* V4 n3 Y
3、配置ck_spre时钟; ck_spre时钟,默认1Hz时钟。
& ^4 T& T* f' U, X. ~4 q: M/ U& O! M
(1) 设置7位异步预分频,RTC_APREGREDIVA,默认127;
. k0 _6 J# o! f& ^/ K
4 H( z" _4 X9 S/ E. G(2) 设置13(Medium)或15位同步预分频,RTC_SPRERxREDIV_S,默认255。
6 o- w7 V. U) s9 J2 a; x, N7 I9 q* g# c
20190814171418490.png

, Q1 e( W6 }' b' r) U* \7 v" n! D+ u# g5 O; n4 d/ x$ h; p" S
即:1Hz=32768/((127+1)*(255+1))
, I# k8 x- m+ `( k' z4 Gck_spre时钟可用于日历和定时唤醒时钟。
+ ^) D( d! O2 X) v" U) j
: n, |1 E/ D; r1 J代码参考
  v6 L8 r, p: g# ?  V& I( i/ Z8 [* \! t//参数time 秒
; ~( ?1 ]; c: _. t
. Y+ q+ k9 L3 T5 h3 L4 Q+ b8 C
  1. void APP_EnterLP(uint32_t time )
    ) ~5 }8 f9 y5 [% O& o7 w% B

  2. 5 I8 |$ m, N: `3 `2 Q: A( }
  3. {9 s- }% F9 m% e# N
  4. % C( h/ T9 `% X4 t! Q: e
  5.          MX_GPIO_Init_stop();) C: y5 b6 W5 Y8 l

  6. % Z7 ?$ ]0 {: B8 Q1 ]# e
  7. /* Enable Ultra low power mode */- \0 f/ Z$ {7 C) }* K
  8. 3 n% ]  i& V- o& d  M9 H
  9.           HAL_PWREx_EnableUltraLowPower(); //使能超低功耗7 f, X3 B; a+ O7 P! T- I4 Z& q

  10. . O  s4 O0 k% B0 ]' Z, F# b4 E7 o
  11.           /* Enable Fast WakeUP */! t( k, i) \- A+ y% s2 ?
  12. 9 I8 H- B/ b1 O3 b
  13.           HAL_PWREx_EnableFastWakeUp();            //使能快速唤醒
    * i# J2 L/ S, ^+ I

  14. ! P, X6 U+ Y/ k  i
  15.            /* Disable Wakeup Counter */8 A% Y# u  {& a. X
  16. 5 x+ Z) z% U5 A' D. Z- p8 O, D
  17.          HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
    & J3 D9 z1 m' [* J8 B
  18. ' J0 a% M! l, K! z! A  p$ W7 M; u5 l

  19. 4 W8 v9 C6 _$ C9 l+ ?

  20. 4 t$ t% t3 F$ m  _, i: v  x
  21. ; [9 z  }% L; B  z6 W3 b

  22. # p! o4 o$ i. d0 w1 T. q* B
  23.       /* Clear Wake Up Flag */
    % t, T" ~; s1 ?, `! k# |
  24. 4 }% ]# G) p  A. J" b7 e
  25.         __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);$ i* f8 T. K- T
  26. $ s3 Q- z2 Y/ K+ V- W' D8 @
  27. 3 e8 b# r0 U8 D2 ?9 g" d& Z* d: J
  28. " n2 o6 ^# O; U+ d- Z
  29.     //    HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, (uint32_t)(time * 2048), RTC_WAKEUPCLOCK_RTCCLK_DIV16);//rtc LSE=32.768k   2048Hz   488us-- 32秒; Z. T  }. p% J! o
  30. * ~7 r0 `5 f! `, o! |
  31. 4 \8 s% N  v, e$ [5 N

  32. 8 c" f) @0 {2 d: [
  33.         HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, time-1, RTC_WAKEUPCLOCK_CK_SPRE_16BITS); //wangxl@20190814  时钟选择1Hz  65535/60/60 ~18  可得到的唤醒时间为 1s 到 18h 左右: Z7 N# i3 N; B+ @8 N# r/ P

  34.   U. U& D- j5 G9 v; Y8 X. _- Q

  35. ! Q. y0 F: n/ Y
  36. 1 z; |4 Q( `- y9 f
  37.         printf("进入停止模式\r\n");: ]+ K9 [- j0 q
  38. 2 l& {$ u9 {+ G% T1 L6 L) q) ^$ O+ d
  39. " M2 E* x! w& l( s# |

  40. / g1 W, L" e* [+ C
  41.         /* Select MSI as system clock source after Wake Up from Stop mode */
    & U8 D6 _$ o  O7 l

  42. $ j( R% `: V* G1 t3 Z
  43.         __HAL_RCC_WAKEUPSTOP_CLK_CONFIG (RCC_STOP_WAKEUPCLOCK_HSI);7 z1 t* u4 M1 V! u, R

  44. 5 j$ q- ]& ^- n+ A, p+ \- H! L
  45. 5 x' W+ F5 R& _8 g5 Q
  46. . L- C2 f: w- W: f  ~
  47.         HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON , PWR_STOPENTRY_WFI);
    - F9 g4 ?/ W: `. M  @# W
  48. ! M" G) N  v7 Z6 m7 v

  49. - e9 v4 S/ o) m

  50. ; P  u' z- Y5 R. J
  51.         MX_GPIO_Init();
      d/ R/ u/ G' M
  52. , x& `. ?+ r7 z4 J

  53. 5 t7 `* v2 c7 b. Q
  54. / U* [" P, r  D0 g" y
  55.         HAL_Delay(5);  //wangxl@20190814  稳定时钟 必免串口打印乱码
    ; [7 [7 p( q! o" h: u0 H" d$ U

  56. 1 _- L; h! r" C) t, M+ s
  57.         printf("wake up\r\n");
    & U' z. R0 q( {. Q

  58. ' \& h" v3 k" g
  59. }
复制代码
# [8 E5 w% l  c( ]

0 O+ e3 ]8 q- z) k7 B& @8 ~2 s% ?# k1 p9 y& [
收藏 评论0 发布时间:2021-11-16 00:27

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版