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

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

[复制链接]
STMCU小助手 发布时间:2021-11-16 00:27
一、周期性自动唤醒--手册文档说明
" [5 J# S, I. M/ ^. K6 h
0 G  D7 P4 K$ r  j  R; C周期性唤醒标志由 16 位可编程自动重载递减计数器生成。唤醒定时器范围可扩展至 17 位。
. G  r) O. j3 E& l% ^8 c$ j2 }9 X9 {+ f
可通过 RTC_CR 寄存器中的 WUTE 位来使能此唤醒功能。
$ ^) s5 r6 h, Q( B( o  S8 s
5 p% {: ]! J4 k# w. n唤醒定时器的时钟输入可以是:  2、4、8 或 16 分频的 RTC 时钟 (RTCCLK)。# u. f0 t+ B; c9 Q+ f
( G! s$ z, o$ G6 ~
当 RTCCLK 为 LSE (32.768 kHz) 时,可配置的唤醒中断周期介于 122 µs 和 32 s 之 间,且分辨率低至 61 µs。
4 Q9 W4 j0 h/ D0 [. n" Q" m5 S1 t% p$ @/ {6 T) K" ^! e
· ck_spre(通常为 1 Hz 内部时钟)。8 L5 y' h) G, S- W7 j9 g+ @
0 w: t/ P4 P' f7 x# e
当 ck_spre 频率为 1 Hz 时,可得到的唤醒时间为 1s 到 36h 左右,分辨率为 1 秒。这 一较大的可编程时间范围分为两部分:2 K9 _: L: g+ \1 r
# i2 k4 t4 B1 L% }
– WUCKSEL [2:1] = 10 时为 1s 到 18h& x1 m) V8 o- M! V
  I' i) Q9 `: ~1 e
– WUCKSEL [2:1] = 11 时约为 18h 到 36h。在后一种情况下,会将 216 添加到 16 位计数器当前值。完成初始化序列后(请参见第 600 页的编程唤醒定时器),定时 器开始递减计数。在低功耗模式下使能唤醒功能时,递减计数保持有效。此外,当 计数器计数到 0 时,RTC_ISR 寄存器的 WUTF 标志会置 1,并且唤醒寄存器会使用其重载值(RTC_WUTR 寄存器值)动重载。 之后必须用软件清零 WUTF 标志。: l/ t) x6 j+ r( I
/ @' k9 ^8 r) V' m9 T
通过将 RTC_CR2 寄存器中的 WUTIE 位置 1 来使能周期性唤醒中断时,它会使器件退出低功耗模式。8 V$ B7 s2 ?+ W6 O* j- Y6 w- _
: ?+ [9 R3 V7 |4 V0 r; h" k( s6 u# T
如果已通过 RTC_CR 寄存器的位 OSEL[1:0] 使能周期性唤醒标志,则该标志可连接到RTC_ALARM 输出。可通过 RTC_CR 寄存器的 POL 位配置 RTC_ALARM 输出极性。: v  w. c& A4 f$ P/ P9 X- p
4 C7 v# Y2 n$ F, ]1 t# X
系统复位以及低功耗模式(睡眠、停机和待机)对唤醒定时器没有任何影响。
4 `& D- m0 h7 j
; r' m- ?, O5 Y) n二、配置周期唤醒

4 ?: b! c" [1 A! ^9 z
& P5 A5 B7 \) s0 i( ^配置步骤如下:" U6 X- K4 F* t  F( h
3 }' v$ v! \& d
1. 禁用周期唤醒功能,复位RTC_CR2中WUTE位;0 m' u  X* h" O$ t
! W* T  i- }, Z! J
2. 等待RTC_ISR1中WUTWF位置位,表示唤醒计数器可配置;
2 X( Y! W. Z+ h" ?& {+ n5 n4 p1 I2 t' ]- \  d; ]
3. 配置唤醒时钟,设置RTC_CR1中WUCKSEL[2:0]位:
$ F" t" C3 P! X: i9 y: ?. l, \( o$ {% j, j1 E
- 000: RTCCLK/16
& f) v9 g0 L  o/ C# h4 S  G# _/ c
1 d' n' F, N8 }9 t, n: ~8 \2 v- 001: RTCCLK/8
6 M& ]5 K$ d$ x7 j/ `1 \4 v/ @4 v2 _; i8 U' n
- 010: RTCCLK/4
6 ~' q8 g, @% U4 ~5 f
$ S6 j/ K; t" M- 011: RTCCLK/2
) W7 w0 z  `1 b3 J  [" G! E, e5 _( |( L  ~, E0 y% R
- 10x: ck_spre(1Hz,WUT计数范围:0x0000~0xFFFF)  x1 o5 @; r* k: s' l

( G* U% }" z6 `# A2 _- 11x: ck_spre(1Hz,WUT计数范围:0x10000~0x1FFFF)5 M8 A* t8 n& f. g( O1 {

. q$ {& t  a, N8 l4. 配置唤醒周期,装载寄存器RTC_WUTRH和RTC_WUTRL;& Y4 D, |, i0 Y- w) q
- x7 ?) z% b0 Q9 j7 u
5. 使能周期唤醒功能,置位RTC_CR2中WUTE位。(该中断会使MCU退出低功耗状态,进入运行状态。)4 [4 d9 f6 f. D, o% n# o' u) ?! v
0 O; F( ]5 \( e( H
RTCCLK,预分频2,4,8或16。如果RTCCLK为LSE,即32768Hz,则可配置唤醒周期为:(61us ~ 32s)
& @$ c# J$ w9 r# G& a( R+ D9 ^3 Z" U, F( \7 @
20190814171352973.png
7 x% q9 G* }/ j* e
$ h1 p* L/ o% T) O
ck_spre, 1Hz时钟,则可配置唤醒周期为1s ~ 36h)
: \* o. z( d. K- Y: F8 N3 @1 {, f* e& S4 M3 T6 {
20190814171403618.png

* W* j* K) r8 X( t. B! \% s
2 z  M1 T& D% d* g( d. d  Y- f三、RTC时钟配置
; h, U" n, Z% R* B2 w
) h3 @' c$ b5 R! m' B1、时钟源选择:RTC时钟源可选HSE,LSE,HSI或LSI。: {6 n: N# ~6 b! s3 w- f
+ ?8 a1 g9 P+ {1 j
为确保RTC精确工作,要求系统时钟(SYSCLK)必须等于或大于4*RTCCLK值。如果系统时钟(SYSCLK)为LSE或LSI,则RTC时钟必须等于系统时钟(SYSCLK),并且禁用RTC同步机制(置位RTC_CR1寄存器RATIO位)。% ^$ y  g, ]2 F3 |' M# k

; E  v# j: u# ?: K# g9 b( t2、配置RTC时钟源:配置RTC时钟源为LSE,1分频,即32768Hz。% ~0 _/ h" r$ ?% m4 L, R
/ R9 k. P: B$ L9 V
3、配置ck_spre时钟; ck_spre时钟,默认1Hz时钟。
3 `$ X) W9 m/ I9 s+ O" u/ W4 i: [1 G% x
(1) 设置7位异步预分频,RTC_APREGREDIVA,默认127;
5 T  r9 i0 W7 H' x: Y  ~% i
: ^- f8 E5 D- G(2) 设置13(Medium)或15位同步预分频,RTC_SPRERxREDIV_S,默认255。% l. O% i* b4 K% I

% F! Z4 t4 s$ p" q$ L( l
20190814171418490.png

5 I1 M5 T  {( A+ m  G" N  D: }+ W+ R
2 k( }( D2 l/ a5 G  @即:1Hz=32768/((127+1)*(255+1))
6 C" `% D' O" L8 Yck_spre时钟可用于日历和定时唤醒时钟。
" b1 \& K+ [9 f5 h0 V) T3 C$ O- T8 u- E0 \- s8 }0 j/ N6 R) V% G8 [
代码参考- M: [. q7 Q: W. y$ _$ B
//参数time 秒& |  o" q# S5 _9 t! {2 b8 i% w
  j( B# Z( q& w$ e5 p' N
  1. void APP_EnterLP(uint32_t time )' f& V$ `8 J4 p
  2. " V- H* b5 K' [7 N9 y8 B# `8 ~' E
  3. {
    3 Z' V4 u4 ^) F7 l2 S) ]

  4.   n# _- f( \( o2 M
  5.          MX_GPIO_Init_stop();
    ) k  f7 s: Z  D! l
  6. 7 f& W$ `% w" u5 J# Q5 E  z
  7. /* Enable Ultra low power mode */
    / H2 S& s: L* I1 o
  8. % X1 u# x* d" \8 y/ X+ X" X
  9.           HAL_PWREx_EnableUltraLowPower(); //使能超低功耗. ]. A4 ]6 |% n1 v& ]/ w; ?. ~% P. }

  10. $ _$ q4 m- ?* D* h& L9 {
  11.           /* Enable Fast WakeUP */% `8 Z. o' q# w/ u; S
  12. ! B" _# `  X6 a5 l9 s% r; ?
  13.           HAL_PWREx_EnableFastWakeUp();            //使能快速唤醒
    9 H+ l" Q  N; X8 e1 J. m  ^, @

  14. 3 A8 K" r) ]1 a2 S! q# b
  15.            /* Disable Wakeup Counter */6 k5 K- J5 g3 _7 L8 X% x! M( M

  16. : \0 P. |  b) b' }/ p) h
  17.          HAL_RTCEx_DeactivateWakeUpTimer(&hrtc);" K6 d  g% y" D) N! g5 D0 H! O+ t

  18. ' D: X/ h+ x, B3 `$ ^/ z
  19. / u( x; A1 E  V7 v

  20. % s  v: ?. [! m7 w: ?- q0 _# X
  21. ; v. j- e) H: E3 L# }% t5 u
  22. : h: w+ \1 k8 q' S0 J0 P  z( j
  23.       /* Clear Wake Up Flag */: e# S- L9 t: {& F& Z( Z- p6 Y
  24. ) L# O0 h1 G+ ]$ _* d3 ^" ]
  25.         __HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);7 v: Y3 C; m9 Q. D. G5 U
  26. ' T% u7 l! t8 q- e* }

  27. 0 w, V! X' ^* e1 T- b

  28. 1 |" h; ^, c/ [+ B5 p8 \0 t8 X
  29.     //    HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, (uint32_t)(time * 2048), RTC_WAKEUPCLOCK_RTCCLK_DIV16);//rtc LSE=32.768k   2048Hz   488us-- 32秒
    7 Z% B* z. ?9 E' q

  30. 5 i$ {8 `* c$ I/ k( m, p

  31. ) `3 O" Z$ a7 }9 h  k# y  O! h3 w. H

  32. + X+ ]# P. c" X" c& f1 T
  33.         HAL_RTCEx_SetWakeUpTimer_IT(&hrtc, time-1, RTC_WAKEUPCLOCK_CK_SPRE_16BITS); //wangxl@20190814  时钟选择1Hz  65535/60/60 ~18  可得到的唤醒时间为 1s 到 18h 左右2 X$ I) X; f" W/ S2 j0 j  S
  34. * D1 }6 F# s, J; t5 @
  35. - i/ `2 F; e: C: J  Y

  36. 5 W" O+ [0 g7 N
  37.         printf("进入停止模式\r\n");+ X* Y7 ]; ]2 B. a

  38. % G; Q$ X" x: b3 I' a) l, t
  39.   _( I& ]4 u& g: r* F# p2 L

  40. 2 q1 K1 J# s4 |6 L8 U7 Z# I+ c
  41.         /* Select MSI as system clock source after Wake Up from Stop mode */
    4 |8 T/ N. }6 Y# E+ i
  42. % x  W+ E& C' r8 Y
  43.         __HAL_RCC_WAKEUPSTOP_CLK_CONFIG (RCC_STOP_WAKEUPCLOCK_HSI);* T" Z2 r- E, z4 c/ z
  44. # _$ ?# g2 Y9 e( f& ^! u& c+ p8 U1 v
  45. / {+ F8 H) k( `& ~& I1 }
  46. 0 M. f7 w% y: g3 v: B$ O3 k
  47.         HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON , PWR_STOPENTRY_WFI);
    : {4 O- m8 w2 x& \& o

  48. - W% ?) N  |8 A9 ~( x
  49. / a0 }! F3 ^! T, @: a

  50. 7 W/ X, u$ f# k
  51.         MX_GPIO_Init();
    9 z* s: d/ N6 n: k

  52. ; k' |. \5 d0 C: r( r& \
  53.   U: j  X2 L2 i  b7 ?
  54. , L( S5 V, s0 h* s
  55.         HAL_Delay(5);  //wangxl@20190814  稳定时钟 必免串口打印乱码  t) }: _4 m$ Q1 s

  56. + V. a6 t9 W1 t/ s6 T* b6 @$ l9 P0 A
  57.         printf("wake up\r\n");9 S& C3 e8 V8 l0 j) D  b
  58. + Y9 M/ ]) @  p* i
  59. }
复制代码
8 [1 o* m0 k) d) V+ m4 o. t2 O
; V# U/ _+ E, N2 d6 W. a" H
+ l- v4 e2 }2 c; ~5 K
收藏 评论0 发布时间:2021-11-16 00:27

举报

0个回答

所属标签

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