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

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

[复制链接]
STMCU小助手 发布时间:2021-11-16 00:27
一、周期性自动唤醒--手册文档说明
; `4 T) U( R4 D% x1 f: |! B( Z# ?2 y; V" o$ E9 q
周期性唤醒标志由 16 位可编程自动重载递减计数器生成。唤醒定时器范围可扩展至 17 位。- k' q' t* [* y; p1 X8 R2 f) ~; S. ^
: c. g0 W$ @3 @; O3 _. o' s
可通过 RTC_CR 寄存器中的 WUTE 位来使能此唤醒功能。
2 Y. X0 j) m! C; ?( J( U. a7 K
! v! \9 K7 Q$ e* J/ a# t唤醒定时器的时钟输入可以是:  2、4、8 或 16 分频的 RTC 时钟 (RTCCLK)。
; ]: Q% B  Q3 y. Z6 p- e# X3 K+ @& L, X3 M5 X5 D" r
当 RTCCLK 为 LSE (32.768 kHz) 时,可配置的唤醒中断周期介于 122 µs 和 32 s 之 间,且分辨率低至 61 µs。3 m# f+ ~! ~* g7 w

2 A3 x6 x. @& |$ e, U· ck_spre(通常为 1 Hz 内部时钟)。
% I* K) a) r- }9 q" B  ~. s5 t9 w, m5 M4 A8 w
当 ck_spre 频率为 1 Hz 时,可得到的唤醒时间为 1s 到 36h 左右,分辨率为 1 秒。这 一较大的可编程时间范围分为两部分:
* T, P3 {. T0 y5 \9 {& j- o1 `& A* k, v' q+ q
– WUCKSEL [2:1] = 10 时为 1s 到 18h3 `  L4 ^1 x- A% F
4 |% b( D+ m6 D. j  `
– WUCKSEL [2:1] = 11 时约为 18h 到 36h。在后一种情况下,会将 216 添加到 16 位计数器当前值。完成初始化序列后(请参见第 600 页的编程唤醒定时器),定时 器开始递减计数。在低功耗模式下使能唤醒功能时,递减计数保持有效。此外,当 计数器计数到 0 时,RTC_ISR 寄存器的 WUTF 标志会置 1,并且唤醒寄存器会使用其重载值(RTC_WUTR 寄存器值)动重载。 之后必须用软件清零 WUTF 标志。* N& z& r3 K  V& V
" s6 `0 o8 ?) ?( b/ {5 d
通过将 RTC_CR2 寄存器中的 WUTIE 位置 1 来使能周期性唤醒中断时,它会使器件退出低功耗模式。
: k% j- F4 U5 a
/ ^# K2 J3 D& R5 M) o* {3 _如果已通过 RTC_CR 寄存器的位 OSEL[1:0] 使能周期性唤醒标志,则该标志可连接到RTC_ALARM 输出。可通过 RTC_CR 寄存器的 POL 位配置 RTC_ALARM 输出极性。
4 J: V1 r7 G# O7 ~$ a
1 S2 g. C% U" C$ ]系统复位以及低功耗模式(睡眠、停机和待机)对唤醒定时器没有任何影响。
6 i7 L  T( h* e" w* c% I! m; t. G" g/ r2 Q# n. {! K/ g4 C& Y, I# `' F
二、配置周期唤醒
! l2 X4 \: b$ S3 A' @  v) Z  x

7 ~" c3 i& e" }- j9 A配置步骤如下:
' X& h+ v8 V4 p4 z( S1 @0 p6 c6 h( A5 c" |  k; k: l
1. 禁用周期唤醒功能,复位RTC_CR2中WUTE位;
' y1 l/ v4 d* E
/ {  X! ?, E. }0 B  e2. 等待RTC_ISR1中WUTWF位置位,表示唤醒计数器可配置;
7 |1 o* c/ |2 O4 g
5 j2 \- o4 }* V+ ~9 |7 L: c3. 配置唤醒时钟,设置RTC_CR1中WUCKSEL[2:0]位:
9 u+ n% r5 @4 h- S2 L, d0 V% P# Z* b
- 000: RTCCLK/16
/ s4 @! n/ k2 Z+ R% G
# }& U' y# P+ U8 l' s  F3 k' l- 001: RTCCLK/81 ?8 a6 Z- B8 C$ G

3 ]  V6 J# K, z- 010: RTCCLK/4
' i: H$ `! ]$ M1 d0 _& k  e" u) v4 {( [8 ^& J8 k7 Y$ Q  u1 x2 L
- 011: RTCCLK/2: ^/ G! @( E) Q0 V0 b: C/ e" L

2 ]8 |8 S/ h0 q; C  }' d- 10x: ck_spre(1Hz,WUT计数范围:0x0000~0xFFFF)
6 ^4 S% K3 ~5 i# v5 D/ c- D5 r, |9 a& y7 p7 Z- K4 U
- 11x: ck_spre(1Hz,WUT计数范围:0x10000~0x1FFFF)
1 @' c5 J! S4 o& O; I) |7 K) p
0 L* G  @4 D1 G" Y- y4. 配置唤醒周期,装载寄存器RTC_WUTRH和RTC_WUTRL;
/ h! H6 F! `& r% g& m* c" H
* F. A4 `/ B8 A: k% I9 c, p5. 使能周期唤醒功能,置位RTC_CR2中WUTE位。(该中断会使MCU退出低功耗状态,进入运行状态。)
2 ?+ s# _9 _/ O" ^
2 c" ~2 N7 E4 `# _( |RTCCLK,预分频2,4,8或16。如果RTCCLK为LSE,即32768Hz,则可配置唤醒周期为:(61us ~ 32s)4 g/ n& S8 Z/ Y1 k1 M. O% o3 A3 R

/ D, C) ?; x# F3 E; B
20190814171352973.png
& G7 ~/ @0 T- z/ N1 m/ T, S, F
4 K7 S( z* }' G; n5 j
ck_spre, 1Hz时钟,则可配置唤醒周期为1s ~ 36h)
. ~1 o& `0 e5 r0 a& O/ r9 R3 J: J5 q2 Y5 V* R, x5 [; Y! b
20190814171403618.png

, H: L* ]1 N0 F! U9 o
3 ~1 Q. L( e$ h& V: i三、RTC时钟配置
* Q% ?% m) R, v. @+ W3 F( E7 T4 A1 {& O" O4 V4 Q5 C
1、时钟源选择:RTC时钟源可选HSE,LSE,HSI或LSI。, ^" h: q+ W( o
2 p. A. H. S: B1 p! f; S$ B) @5 q
为确保RTC精确工作,要求系统时钟(SYSCLK)必须等于或大于4*RTCCLK值。如果系统时钟(SYSCLK)为LSE或LSI,则RTC时钟必须等于系统时钟(SYSCLK),并且禁用RTC同步机制(置位RTC_CR1寄存器RATIO位)。
9 e  w. v+ O4 e* a: }9 s" R# P1 j% `7 [; M
2、配置RTC时钟源:配置RTC时钟源为LSE,1分频,即32768Hz。
$ w8 x) b& _' W" }' G( c5 o$ a* y5 q! ?4 `- o
3、配置ck_spre时钟; ck_spre时钟,默认1Hz时钟。
, k, h1 _8 q, U) L% S/ N( ^2 b7 D7 ?8 N9 ^
(1) 设置7位异步预分频,RTC_APREGREDIVA,默认127;
# t& Z" o. R8 p# y2 A* L8 k0 R  V4 y
6 w7 J: k. l( X  @5 o(2) 设置13(Medium)或15位同步预分频,RTC_SPRERxREDIV_S,默认255。
  e( `% q/ M9 g2 d$ w2 n0 b: U9 N! m
20190814171418490.png

( _) ^: L5 m2 [6 L) A) e
; T; p( T- l; X8 ?即:1Hz=32768/((127+1)*(255+1))
3 N8 J& F0 D! Z: ~* e4 ?  Y7 ]. hck_spre时钟可用于日历和定时唤醒时钟。6 `4 {/ K# q$ [5 C( k

6 ]/ C7 M% Q) {( a# D代码参考
! r( J' I: L5 ^/ U7 e2 Y//参数time 秒* H! k( I- w) I& w; u
7 Y; R# B- t" u% z/ {7 }) p! X
  1. void APP_EnterLP(uint32_t time )
    , @, _$ ~) M9 T, A
  2. " p$ ]( `- Q8 Q  r" c
  3. {
    # R6 _7 B* N" M

  4. % [4 B5 j+ t1 A. c9 ?) i% }
  5.          MX_GPIO_Init_stop();
    8 t# n2 E: {7 ?! p+ \/ m: D& ?
  6.   k1 b; e4 t1 S7 ^
  7. /* Enable Ultra low power mode */6 I, [2 \5 d  a# P
  8. ) }/ T0 X1 O: y
  9.           HAL_PWREx_EnableUltraLowPower(); //使能超低功耗2 Z8 k% }; w1 J* p# }) ~
  10. 4 m+ I' @$ q$ X
  11.           /* Enable Fast WakeUP */: }! W, R, g6 k* v) {& T/ b
  12. $ @$ E, c7 l+ J. D
  13.           HAL_PWREx_EnableFastWakeUp();            //使能快速唤醒5 K1 K7 S3 Y( L+ Y1 Q
  14. ( a, Y! j" F- j9 r) w* U7 ]
  15.            /* Disable Wakeup Counter */
    6 z) w9 h+ P8 w1 L
  16. 2 L3 [- c$ S5 z8 ?. |
  17.          HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);
    8 f) D* G7 U0 R1 G6 k9 U* A

  18. $ G' l: H# W4 I$ q# R$ T
  19. / S" q2 I2 Z( E2 [- _+ o3 o
  20. " l. ?) o' O# i, X- C

  21. 9 h0 r) w3 h9 x8 n) B8 r% ]

  22. 6 X; \2 d- Y( U& P
  23.       /* Clear Wake Up Flag */" f4 c8 {2 P6 g% |5 r; ~1 v
  24. 5 C+ J) v6 q6 Y4 C+ |# S
  25.         __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
    ' _$ Q- t# d* E3 F& c8 J

  26. ' b7 p- a4 R9 \1 J9 i. p
  27. 4 \/ @( |2 [" B  U

  28. ; A$ j' x: @* [4 m
  29.     //    HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, (uint32_t)(time * 2048), RTC_WAKEUPCLOCK_RTCCLK_DIV16);//rtc LSE=32.768k   2048Hz   488us-- 32秒
    ; j7 W6 l, ]* b4 b
  30. * F" c  {1 b5 ^" x2 E
  31. 7 N) d5 m$ @6 N. T# N3 ?
  32. 0 A  R# d# W3 L8 I( |
  33.         HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, time-1, RTC_WAKEUPCLOCK_CK_SPRE_16BITS); //wangxl@20190814  时钟选择1Hz  65535/60/60 ~18  可得到的唤醒时间为 1s 到 18h 左右
    , X! s; b( n9 T  R+ g. w# q# ]
  34. 0 s, T1 J6 L& D! M5 G) Q% k
  35. 9 S- H) T, x. Z4 b) J) m& `+ L
  36. * S0 M$ ]' ~8 b6 j
  37.         printf("进入停止模式\r\n");( f5 @9 [5 _5 U  i

  38. ; h1 C! Q. ]3 r6 p9 d0 ^
  39. , D, e( D* J  `: U. J
  40. 3 S% W  \  e1 w1 ~! P3 R4 U
  41.         /* Select MSI as system clock source after Wake Up from Stop mode */
      Q9 Y% v# {, _  Z  k# R2 |* H) Y- _
  42. $ {7 u8 ~% A4 A+ w3 Z) I
  43.         __HAL_RCC_WAKEUPSTOP_CLK_CONFIG (RCC_STOP_WAKEUPCLOCK_HSI);3 [& V' X( a4 b1 N2 V
  44. 1 d3 L& h7 f( t. |2 _

  45. * h, @, g4 a$ F3 ^- \/ I

  46. 1 d9 n. y; }! c* \( n* ?
  47.         HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON , PWR_STOPENTRY_WFI);  d. e' R, ~- E! O5 U; D$ q, U
  48. - D5 t- z4 k) x1 C: C

  49. : a& M5 S$ C  ]- T. V- I/ q
  50. # z( M! X6 y1 G6 t) s* C5 T# F
  51.         MX_GPIO_Init();5 K' p5 V, i; U. d9 o
  52. ! F: F; g6 R7 b* i' ^- q3 l

  53. % P: n  c* \( `+ N9 ^, v
  54. ( C0 g) V9 L' I) T
  55.         HAL_Delay(5);  //wangxl@20190814  稳定时钟 必免串口打印乱码4 m9 C) `' V5 b1 u& S7 @1 L

  56. % a0 f$ l2 p. Y6 }  e% U
  57.         printf("wake up\r\n");
    - K) U) f( ?$ T" ~5 @  |( x$ a

  58. ! @+ Q. f0 ~( j$ {
  59. }
复制代码
6 z% B- O/ L3 a  I

# N# o6 X, B' g8 p4 S
. X3 n8 {  i; _( t4 d! U
收藏 评论0 发布时间:2021-11-16 00:27

举报

0个回答

所属标签

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