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

【经验分享】STM32 RTC详解

[复制链接]
STMCU小助手 发布时间:2022-3-29 09:41
01. RTC概述
4 F9 q/ A* L1 A$ p, U& f6 a实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供一个日历时钟、两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。RTC 还包含用于管理低功耗模式的自动唤醒单元。
' N! N, q) e1 k! x2 ^0 I; M8 E
' M/ h1 a/ ^) _% ?  g1 a2 E* z; a* Y两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时(12 或 24 小时制)、星期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。
; W0 g( s6 q0 _* N8 f# }6 [1 |/ W- O
9 u( x$ d* D; w系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。并且还可以进行夏令时补偿。. R6 z" i( i9 z" ^4 b  {7 F' x
6 B& Q9 f9 y7 \9 e
其它 32 位寄存器还包含可编程的闹钟亚秒、秒、分钟、小时、星期几和日期。此外,还可以使用数字校准功能对晶振精度的偏差进行补偿。
. w0 w. @" [( T: N% i/ t2 ?' ^; U+ f. U: a+ c9 |$ o
上电复位后,所有 RTC 寄存器都会受到保护,以防止可能的非正常写访问。
; e: G( Y4 L) k1 U0 n# p: F, d; \/ E9 ]
无论器件状态如何(运行模式、低功耗模式或处于复位状态),只要电源电压保持在工作范围内,RTC 便不会停止工作。) X  U5 f" D! j0 L5 A' q

; W) F. o4 `, J2 y6 J, N02. RTC主要特性# D7 }( G% Z# d# o0 Q* ~9 ]8 _
RTC 单元的主要特性如下(参见 图 222 : RTC 框图 ):
6 y! r) N4 }- [4 p8 z* Q● 包含亚秒、秒、分钟、小时(12/24 小时制)、星期几、日期、月份和年份的日历。8 l  p. w2 U0 S1 \4 K
● 软件可编程的夏令时补偿。# ]( R' p8 Y' k5 D! G9 y
● 两个具有中断功能的可编程闹钟。可通过任意日历字段的组合驱动闹钟。$ r% E8 w* Q2 g6 P- s
● 自动唤醒单元,可周期性地生成标志以触发自动唤醒中断。
" D0 a7 J8 Q# G& n6 M6 ]- I● 参考时钟检测:可使用更加精确的第二时钟源(50 Hz 或 60 Hz)来提高日历的精确度。
( {1 ~1 {; X+ H+ k2 g8 n● 利用亚秒级移位特性与外部时钟实现精确同步。0 D* ~+ U# _/ t2 k" i; ^+ G4 _$ Z
● 可屏蔽中断/事件:/ V% Y2 q9 [( K: A( q. e/ d
— 闹钟 A
7 t  D' c# S7 X% Z6 O& P; m0 S— 闹钟 B; w, z& H- u/ k6 n$ d
— 唤醒中断
5 r( A  F$ Y/ q- ]6 _& X- a' ]— 时间戳' ]8 f/ M+ p  X: |1 ?' n# T
— 入侵检测3 e! w+ I8 f8 F& x3 [/ M1 u( k
● 数字校准电路(周期性计数器调整)5 S- I: [7 m, c4 k7 f
— 精度为 5 ppm
! R2 C/ X5 x3 c! \— 精度为 0.95 ppm,在数秒钟的校准窗口中获得
9 N" `# s2 I8 R8 Z+ ^& v! e● 用于事件保存的时间戳功能(1 个事件)
" g! W# T, t; q' A& b● 入侵检测:
+ D. c3 o- I3 D( B" h! \— 2 个带可配置过滤器和内部上拉的入侵事件
1 i( D0 H! [: Z3 p! U3 C2 L& @● 20 个备份寄存器(80 字节)。发生入侵检测事件时,将复位备份寄存器。
: [( {2 ~# T( j, K6 a1 [, ]& O( H! c$ H$ R+ o2 a8 _
● 复用功能输出 (RTC_OUT),可选择以下两个输出之一:
( W# ^" z0 {) `. \( A$ j) B— RTC_CALIB:512 Hz 或 1 Hz 时钟输出(LSE 频率为 32.768 kHz)。, T3 J7 y8 x1 W5 p
可通过将 RTC_CR 寄存器中的 COE[23] 位置 1 来使能此输出。该输出可连接到器件 RTC_AF1 功能。8 ~. T2 w/ R3 }6 G+ q) a6 G
— RTC_ALARM(闹钟 A、闹钟 B 或唤醒)。4 Y- z7 j) Q1 l4 s- R8 I# F
可通过配置 RTC_CR 寄存器的 OSEL[1:0] 位选择此输出。该输出可连接到器件RTC_AF1 功能。) C3 [# E: R% K0 y7 Z* Q
● RTC 复用功能输入:& h3 p$ W9 E$ X8 W
— RTC_TS:时间戳事件检测。该输入可连接到器件 RTC_AF1 和 RTC_AF2 功能。
" T( J& D+ C2 o& v! N% v/ I: B: J— RTC_TAMP1:TAMPER1 事件检测。该输入可连接到器件 RTC_AF1 和 RTC_AF2功能。5 ~8 f$ W5 m7 N& M: C
— RTC_TAMP2:TAMPER2 事件检测。' g, {6 s& {6 c+ E
— RTC_REFIN:参考时钟输入(通常为市电,50 Hz 或 60 Hz)。' v& p3 q% M/ t  `

: W( K6 B1 u' j) R, Q$ V3 \/ N 20200908113356818.png
0 n6 r: _5 P# `) S" o* R% L/ z0 x. k2 i  e3 s( E
03. RTC部分功能
: q0 j3 o( T! b  a3.1 时钟和预分频器
4 v7 X, o$ p% M5 c4 F$ z
RTC 时钟源 (RTCCLK) 通过时钟控制器从 LSE 时钟、LSI 振荡器时钟以及 HSE 时钟三者中选择。有关 RTC 时钟源配置的更多信息,请参见 第 6 节:复位和时钟控制 (RCC)。' m8 s+ v3 n, z
: M9 g; ]& P6 }5 y  \0 a0 U8 ?( g, d& q
可编程的预分频器阶段可生成 1 Hz 的时钟,用于更新日历。为最大程度地降低功耗,预分频器分为 2 个可编程的预分频器(参见 图 222 : RTC 框图 ):" ]% X. B4 p1 E7 Z6 ]* o# ^0 O' [4 J1 w
● 一个通过 RTC_PRER 寄存器的 PREDIV_A 位配置的 7 位异步预分频器。
% `2 l$ t" E  W5 x● 一个通过 RTC_PRER 寄存器的 PREDIV_S 位配置的 15 位同步预分频器。5 e4 S) z/ y, l9 m7 N

0 G  ^2 b* x. K% ?注意: 使用两个预分频器时,推荐将异步预分频器配置为较高的值,以最大程度降低功耗。5 e2 {  \, a5 `/ h# A1 D1 M" f5 k
6 q2 ]( U; \$ t  r5 Z
要使用频率为 32.768 kHz 的 LSE 获得频率为 1 Hz 的内部时钟 (ck_spre),需要将异步预分频系数设置为 128,并将同步预分频系数设置为 256。分频系数的最小值为 1,最大值为 2 ^22 。这对应于约为 4 MHz 的最大输入频率。f ck_apre 可根据以下公式得出:
0 E  ~+ N6 k5 J( }# C) g, b/ h# ^1 Q: a5 B4 R" W2 w6 J
20200908113407987.png " G4 R% P9 S$ a' M- Z& x7 f5 [8 n

: Q8 h: v% U. R/ }, p# W! q3.2 实时时钟和日历% M; K; ^! y) y* m1 p, U
RTC 日历时间和日期寄存器可通过与 PCLK1(APB1 时钟)同步的影子寄存器来访问。这些时间和日期寄存器也可以直接访问,这样可避免等待同步的持续时间。
7 t% I5 |2 j& `+ E" G  Y0 Z8 w( Z: k+ D8 d
● RTC_SSR 对应于亚秒
/ p+ ^- Q) R* Z4 K● RTC_TR 对应于时间2 L- c' i+ b- [: Y) h
● RTC_DR 对应于日期' \5 t8 N- g9 b$ y  A6 h9 a* a

& H& C" M+ K2 W2 s$ L. [0 `7 P& W( F每隔两个 RTCCLK 周期,便将当前日历值复制到影子寄存器,并将 RTC_ISR 寄存器的 RSF位置 1(请参见 第 23.6.4 节 )。在停机和待机模式下不会执行复制操作。退出这两种模式时,影子寄存器会在最长 2 个 RTCCLK 周期后进行更新。4 d+ C7 e! Y6 w
" w+ j' g! L, o* {* }
当应用读取日历寄存器时,它会访问影子寄存器的内容。也可以通过将 RTC_CR 寄存器的BYPSHAD 控制位置 1 来直接访问日历寄存器。默认情况下,该位被清零,用户访问影子寄存器。5 ?. h  s' p0 n# D# q4 H3 K0 o2 }% ]

- Z: q$ B# @6 @, Z" N在 BYPSHAD=0 模式下读取 RTC_SSR、RTC_TR 或 RTC_DR 寄存器时,APB 时钟频率(f APB ) 必须至少为 RTC 时钟频率 (f RTCCLK ) 的 7 倍。影子寄存器通过系统复位来复位。
% ]/ c9 K0 t; i* d0 X" n
9 i( P% ~( x( b0 q04. RTC低功耗模式和中断

4 Q1 [6 Z$ x( X- F' W0 V- y1 e/ X5 [低功耗模式: x7 d7 H) x+ v6 `% m
; b  f2 q: }3 o
2020090811342526.png # y  Z# u% }' {& S/ K6 ^

% ^) v. t0 |( s+ d( Z, ARTC中断
/ w' Q5 r  v" z2 Y' I' D% t+ _: V$ I- C) W0 |
所有 RTC 中断均与 EXTI 控制器相连。5 k4 y2 ], J7 b3 G1 |' L2 y* \

9 _0 _( a7 a# P# r7 k, l5 K2 e7 ]$ V要使能 RTC 闹钟中断,需按照以下顺序操作:
3 |- _, w: A( ?5 E7 x. f+ B$ G8 _$ B- A9 a
   1.将 EXTI 线 17 配置为中断模式并将其使能,然后选择上升沿有效。1 Z( ~$ _/ v* v) _3 d4 X  y

4 g0 r! Q+ s/ I6 Z; s   2.配置 NVIC 中的 RTC_Alarm IRQ 通道并将其使能。
. F* n. n" X0 V& t" E# n; ~
. f8 L6 H: g7 X6 l2 x- y& s) p" U. }$ E   3.配置 RTC 以生成 RTC 闹钟(闹钟 A 或闹钟 B)。+ S  k! l+ r5 X9 ^, z& X0 d/ g

" p; C' @! L% g6 Z1 w4 H7 S要使能 RTC 唤醒中断,需按照以下顺序操作:0 ~: B8 p- h9 u; l. @4 v
  y9 d. ]* b8 n! D7 i0 X
   1.将 EXTI 线 22 配置为中断模式并将其使能,然后选择上升沿有效。6 ?# `- P: v! A2 @
8 C5 l2 }2 R2 Q. D% Q" @* r
   2.配置 NVIC 中的 RTC_WKUP IRQ 通道并将其使能。: W( @2 d3 U5 T5 `; i: {  r( b

- x% r. c! F3 o  O2 T0 w1 I   3.配置 RTC 以生成 RTC 唤醒定时器事件。
# Z0 b& _1 F$ Y* U: ~. C  n7 P3 m8 V% X! Z
要使能 RTC 入侵中断,需按照以下顺序操作:, A) ~3 w9 i/ z$ x; o. c

' {4 e4 l7 w( N# ^( W   1.将 EXTI 线 21 配置为中断模式并将其使能,然后选择上升沿有效。
; m. f+ f9 M4 C# Q) E3 E3 V
$ I# b/ Y, h7 ~1 c# t   2.配置 NVIC 中的 TAMP_STAMP IRQ 通道并将其使能。
( m, K7 Q) [( c/ i
# I/ ~! A+ l* B0 {. |   3.配置 RTC 以检测 RTC 入侵事件。- Q- f1 S; Q  S  z# ~& }+ Q+ p2 b/ }$ J, z

. a8 M$ |% k$ O& t# H" V5 _) {! U要使能 RTC 时间戳中断,需按照以下顺序操作:0 a0 f, {- g8 x& |/ X/ h1 z6 P: M2 l: Q* E
" ]/ s$ l/ ?- N9 c# |
   1.将 EXTI 线 21 配置为中断模式并将其使能,然后选择上升沿有效。, d. o: L9 ~3 U1 x
9 |8 y5 t/ \- t: S2 f: x) E& \
   2.配置 NVIC 中的 TAMP_STAMP IRQ 通道并将其使能。
# l6 p& y% X2 ?( w/ U! j3 H' V
  Q0 E2 J# \. x8 A   3.配置 RTC 以检测 RTC 时间戳事件。
' d0 j8 {: O: t* B
9 A( m3 r9 g/ p. G) M. R 2020090811344889.png
0 h: j% n) l& E# N7 e
# n+ V" n: T4 r  Y0 i  k5 q
05. RTC寄存器
1 d5 d5 v) ]7 l7 {6 f( \, a# ^) e5.1RTC 时间寄存器 (RTC_TR)
. `' ]8 R) c* b4 g
RTC time register
# F( M/ l  u: i) gRTC_TR 是日历时间影子寄存器。只能在初始化模式下对该寄存器执行写操作。
8 w) G, O  @% o偏移地址:0x00' j2 j# P" c; h' B2 ^9 C8 }
上电复位值:0x0000 0000' X0 d! O% S& h8 Q6 ~$ x) w0 n( P
系统复位:当 BYPSHAD = 0 时为 0x0000 0000;当 BYPSHAD = 1 时不受影响。
- |5 E& V2 S/ X8 L, }3 `& M" u5 C- y9 }6 `3 T; L; J1 r. V
20200908113500328.png
$ s- u0 r* f4 H8 g; l- }: P8 k6 c; }  O: c1 T
5.2 RTC 日期寄存器 (RTC_DR)
  j4 @3 F5 V" w1 D6 oRTC date register
6 F: V% S0 ^# x, W6 c  rRTC_DR 是日历日期影子寄存器。只能在初始化模式下对该寄存器执行写操作。
4 x/ I* k6 _  @  x( l2 \& T! ~偏移地址:0x04# E7 F& ], n( y& r$ I  t, n5 k
上电复位值:0x0000 21019 H# B6 i' j9 y2 z, }
系统复位:当 BYPSHAD = 0 时为 0x0000 2101;当 BYPSHAD = 1 时不受影响# F6 I3 t( H1 N$ h2 S1 L! Z
9 M; Y$ v) q5 I4 [6 T
20200908113514834.png
8 }& b; [7 t5 v9 W7 w
0 o  h/ r& {7 `7 y  e/ u5.3 RTC 控制寄存器 (RTC_CR)9 U5 u5 l2 h% K8 S1 }
RTC control register
1 z- L* J. F! d/ b4 v% d偏移地址:0x08
) v5 e% U3 e2 e: R上电复位值:0x0000 0000
1 b4 Z- [& k' {3 M2 e2 d系统复位:不受影响
; ]6 M3 R/ R. g. d5 v! _) L0 P- [% E* j2 X! R0 L5 O$ d% z
20200908113523139.png ; P- w5 S' R, z2 l

" C- Q/ F9 @( b: x' M3 A位 22:21 OSEL[1:0]:输出选择 (Output selection)
; H  ^5 H4 r' I' P这些位用于选择要连接到 RTC_ALARM 输出的标志2 q' k+ |4 S1 A, w- M
00:禁止输出$ ^- i5 R. ]: V' x3 z+ l% t7 Z" D
01:使能闹钟 A 输出
, `) L* T$ m% p# E2 s1 n10:使能闹钟 B 输出) O$ v, a1 S  P( I# x$ t
11:使能唤醒输出( H4 V  W& a* M$ O
位 20 POL:输出极性 (Output polarity)! d$ x7 `" T6 `  k" [# G$ W8 e# C
该位用于配置 RTC_ALARM 输出的极性" E* E8 W& K, o0 o- b
0:当 ALRAF/ALRBF/WUTF 置 1 时(取决于 OSEL[1:0]),该引脚为高电平7 e8 I+ h, `/ z8 y! }2 x
1:当 ALRAF/ALRBF/WUTF 置 1 时(取决于 OSEL[1:0]),该引脚为低电平
; c& }$ J$ \9 m; ?位 19 COSEL:校准输出选择 (Calibration output selection)
; n4 I5 U9 a8 `* J7 i! _! V当 COE=1 时,该位可选择 RTC_CALIB 上输出的信号。% b! c, ^$ w- @$ z, G: N4 v
0:校准输出为 512 Hz
1 t* C: K& y( D1 B2 E! b# m/ d1:校准输出为 1 Hz
$ ]6 ^7 B2 L+ p在 RTCCLK 为 32.768 kHz 且预分频器为其默认值(PREDIV_A=127 且 PREDIV_S=255)
) L# X# z+ j5 Z- a  _* F的条件下,这些频率有效。请参见 第 23.3.14 节:校准时钟输出 。- g( P- g2 T, a3 ?4 g4 ?" v
位 18 BKP:备份 (Backup)' ]2 m0 o. t9 N- z: N
用户可对此位执行写操作以记录是否已对夏令时进行更改。
9 T& u! _6 s! t5 e8 D位 17 SUB1H:减少 1 小时(冬季时间更改)(Subtract 1 hour (winter time change))
6 i4 t7 E, g6 b% }- f4 H当该位在初始化模式以外的模式下置 1 时,如果当前小时不是 0,则日历时间将减少 1 小
. `8 O' T# X2 K0 E- }# t0 v时。此位始终读为 0。
! @5 i- q2 x* y9 ?( g当前小时为 0 时,将此位置 1 没有任何作用。9 {, E7 K3 }' }
0:无作用。
8 M# g( J; U, w4 h1:将当前时间减少 1 小时。这可用于冬季时间更改。
4 L2 m6 G* ^7 L% e+ K8 p位 16 ADD1H:增加 1 小时(夏季时间更改)(Add 1 hour (summer time change))
, o' s  ]! P! Y& u  d当该位在初始化模式以外的模式下置 1 时,日历时间将增加 1 小时。此位始终读为 0。* J* g, ^+ d7 L% J' g8 R
0:无作用。' d) p3 V- w& b  W# J; Y
1:将当前时间增加 1 小时。这可用于夏季时间更改. F; {# q( e1 j, Z3 a4 x
位 15 TSIE:时间戳中断使能 (Timestamp interrupt enable)
- n: q1 Q* N. u# }0:禁止时间戳中断$ ?8 A: q" y! H2 T6 j0 j
1:使能时间戳中断$ k$ ]- T7 B) F7 e
位 14 WUTIE:使能唤醒定时器使能 (Wakeup timer interrupt enable); ~+ P, ~$ @0 T/ e
0:禁止唤醒定时器中断
: H/ a% E3 h+ g* O6 U1:使能唤醒定时器中断/ q9 X) y. c, J
位 13 ALRBIE: 闹钟 B 中断使能 (Alarm B interrupt enable)- c7 T' p# Q( @( ]- A6 e
0:闹钟 B 中断禁止( S% n- P0 V. [+ v+ P8 g
1:闹钟 B 中断使能3 e: D7 @- R- i
位 12 ALRAIE:闹钟 A 中断使能 (Alarm A interrupt enable)
$ [' E! ?: n8 v6 C0:禁止闹钟 A 中断
+ M% ~: B  Q4 `" {, C3 f) n1:使能闹钟 A 中断5 d6 @# Y- y, v8 M- j
位 11 TSE:时间戳使能 (Time stamp enable)
: d8 Q) W7 S1 E/ B% _0:禁止时间戳
; C% Y* ^& V5 p1 H: j1:使能时间戳
! ]& l5 u% G* W; s位 10 WUTE:唤醒定时器使能 (Wakeup timer enable)
! L& l9 C/ o: u7 K; q3 A0:禁止唤醒定时器( ?8 ]& B5 x/ j. Z. a4 M! D
1:使能唤醒定时器
& i& V% P$ T1 j5 t' K% N. E
$ S! W# u+ {* W6 T* U位 9 ALRBE: 闹钟 B 使能 (Alarm B enable)
% k5 k: |- V3 e0:禁止闹钟 B
! b! m. w# [$ i+ y3 J1:使能闹钟 B
6 h- l4 P6 P# B3 x7 \' l位 8 ALRAE :闹钟 A 使能 (Alarm A enable)9 Q( f3 c1 L1 E
0:禁止闹钟 A) j9 P  S, W& q4 h. z2 i
1:使能闹钟 A- T# q8 J  V7 i" D2 Y- Q
位 7 DCE :粗略数字校准使能 (Coarse digital calibration enable)
7 Z9 ^7 a) Y. |1 ~0:禁止数字校准5 x8 y8 S" p# d, c0 D' @
1:使能数字校准9 e2 b% h5 M: E
PREDIV_A 必须大于或等于 6
: l5 U- m0 \7 n, \* e' o" P位 6 FMT:小时格式 (Hour format)
0 v& s& M' \& n' S& V- B% L! b0:24 小时/天格式
* T5 O: X! G3 J1 M1:AM/PM 小时格式' v4 O* H) N& [+ j4 W
位 5 BYPSHAD:旁路影子寄存器 (Bypass the shadow registers)
  v' Z, A$ Q1 d5 ?% U" G9 j0:日历值(从 RTC_SSR、RTC_TR 和 RTC_DR 读取时)取自影子寄存器,该影子寄存器
) Z* V0 X7 S6 a& e" B1 L每两个 RTCCLK 周期更新一次。  r) t8 N- D7 A5 u: g+ m4 u6 S* F
1:日历值(从 RTC_SSR、RTC_TR 和 RTC_DR 读取时)直接取自日历计数器。6 ~- `* ]3 k/ |. v8 ?
注意:如果 APB1 时钟的频率低于 7 倍的 RTCCLK 频率,则必须将 BYPSHAD 置“ 1 ”。5 K7 \+ k8 D& g' I9 D
位 4 REFCKON:参考时钟检测使能(50 Hz 或 60 Hz)(Reference clock detection enable (50 or
7 J7 M% z2 l% T' I60 Hz))
8 v" c# H& U; h0:禁止参考时钟检测
) ]3 {8 X' W/ w& \% g1:使能参考时钟检测2 [5 V' k4 w9 p6 _# S
注意: PREDIV_S 必须为 0x00FF 。7 V, b; B- U) e( l
位 3 TSEDGE:时间戳事件有效边沿 (Timestamp event active edge)8 S! f/ X9 q: ]) \4 p
0:TIMESTAMP 上升沿生成时间戳事件
/ o' Z' L9 G% e# G7 K1:TIMESTAMP 下降沿生成时间戳事件
% |7 r4 B/ l/ ~5 ?7 T! e, ], wTSEDGE 发生更改时,必须复位 TSE 以避免将 TSF 意外置 17 q" q& n, x8 d6 s% h' W- Y
位 2:0 WUCKSEL[2:0]:唤醒时钟选择 (Wakeup clock selection)3 `' M) L/ V, g, E) X# E
000:选择 RTC/16 时钟
5 t2 X; m$ F7 Y/ v. Z5 E' i001:选择 RTC/8 时钟/ p+ ]  {" L  C# S+ h
010:选择 RTC/4 时钟
5 u6 [2 G! N0 D3 r011:选择 RTC/2 时钟6 D' X3 v( F4 h" H1 q7 @+ b
10x:选择 ck_spre 时钟(通常为 1 Hz)
, U: \+ y- _- u$ y$ {  B11x:选择 ck_spre 时钟(通常为 1 Hz)并将 WUT 计数器值增加 2 16 (见下面的注释)
7 B  c( u+ ]3 J
9 W+ w$ d: c1 i! y* K$ B6 ?  I$ a温馨提示
! d6 s' }2 y6 D+ h7 u
% Z9 ?( K, x  a7 oWUT = 唤醒单元计数器值。当 WUCKSEL[2:1 = 11] 时, WUT = (0x0000 to 0xFFFF) +0x10000 (增加的值)。
* `# C4 q* D9 m( x: ?只能在初始化模式下 (RTC_ISR/INITF = 1) 对该寄存器的位 7 、 6 和 4 执行写操作。- z; l0 ~( |$ l1 c( ]: s$ D
只能在 RTC_CR WUTE 位 = 0 且 RTC_ISR WUTWF 位 = 1 时对该寄存器的位 2 到 0 执行写操作。
4 c+ |7 m2 r3 g  J+ b9 W9 r, e- O建议不要在日历小时递增时更改小时,因为这样做会屏蔽日历小时的增量。ADD1H 和 SUB1H 的更改在下一秒生效。
3 v+ ]- A8 Q. B  [" ~此寄存器受写保护。第 576 页的 RTC 寄存器写保护中介绍了写访问的过程。
( s+ m- G; W* K( n/ j
; A' _# M! ^+ Y5.4 RTC 初始化和状态寄存器 (RTC_ISR)4 F, D$ i& s) q- ?. @
RTC initialization and status register
$ H) S: p7 T& _5 r# O  m偏移地址:0x0C8 @# e, Y# ?# t9 d
上电复位值:0x0000 0007
0 I6 P3 W* x5 i; @* `系统复位值:不受影响(INIT、INITF 和 RSF 除外,它们在复位时被清零)。
' u$ B+ w' y2 K8 _+ |! b: X; l, a2 e& I5 B+ b
20200908113540531.png + r+ x  L& d* n( _. M! h8 Z" m
5 I, M; C) `8 S& j9 W; [$ t" {0 m
位 31:17 保留2 l+ K; M: q$ B3 ~4 p- Q
1 J6 `% u) P) D' {; T  ]
位 16 RECALPF:重新校准挂起标志 (Recalibration pending Flag)
- _  i  U; A+ f! n: X5 B( t当软件对 RTC_CALR 寄存器执行写操作时,RECALPF 状态标志将自动置“1”,指示
2 S& p& C( F. p9 h0 |RTC_CALR 寄存器已屏蔽。当采用新的校准设置时,该位恢复为“0”。请参见 动态重校准一节。6 q) ^4 v5 k; B  U' q/ x# o$ h

; E* x" g. {" o; v7 Y位 15 保留,必须保持复位值。/ d' A. `; c0 D* \- s

) H7 t' M& p* h# X. i位 14 TAMP2F:TAMPER2 检测标志 (TAMPER2 detection flag)+ i' e( B3 \5 d2 b7 ~
在入侵输入 2 上检测到入侵检测事件时,由硬件将此标志置 1。该标志由软件写零清除。: A8 O5 s; d; W+ L/ k
  ~' b) F1 b% G7 P# U* e
位 13 TAMP1F:入侵检测标志 (Tamper detection flag)% d- \3 _# w# @
当检测到入侵检测事件时,由硬件将此标志置 1。
8 ~+ |6 c. B( j/ q  v该标志由软件写零清除。
) _. w( a2 \. G2 ^
) l# u: o; |" e1 K" G$ I5 W位 12 TSOVF:时间戳溢出标志 (Timestamp overflow flag). R7 r; }8 e% B
当在 TSF 已置 1 的情况下发生时间戳事件时,由硬件将此标志置 1。: Q  y. r9 Q5 f  Q/ U
该标志由软件写零清除。建议仅在 TSF 位清零之后再检查并清零 TSOVF 位。否则,如果时: U  N' {7 l2 p  f/ k
间戳事件恰好在清零 TSF 位之前刚刚发生,则溢出事件可能会被漏掉。2 m$ e" N. j* _: a  I) I6 a

% N9 s0 {9 S3 U5 U  a位 11 TSF:时间戳标志 (Timestamp flag)6 l- \6 I, ?! I! n2 b, M
发生时间戳事件时,由硬件将此标志置 1。
+ a1 F9 e/ r5 h- W该标志由软件写零清除。' ]3 O, A7 f! h/ a: D
: Q8 `; w4 j# d# {3 c2 t
位 10 WUTF:唤醒定时器标志 (Wakeup timer flag)+ i, ?- }( ]  R* F
当唤醒自动重载计数器计数到 0 时,由硬件将此标志置 1。* f+ Y) c5 r$ Y. x6 Q/ v' h: V
该标志由软件写零清除。. m6 U: W; F/ n' z1 ~$ r
软件必须在 WUTF 再次置 1 的 1.5 个 RTCCLK 周期之前将该标志清零。  K+ b7 [  X/ M% u0 j7 G
) `; F4 i$ h6 p: T$ E" U
位 9 ALRBF:闹钟 B 标志 (Alarm B flag): P4 \3 k$ W8 D( M$ t
当时间/日期寄存器(RTC_TR 和 RTC_DR)与闹钟 B 寄存器 (RTC_ALRMBR) 匹配时,由
3 }" n. N  ^5 g$ J硬件将该标志置 1。- J# L6 T! ^% o1 u4 u' Q; v. L
该标志由软件写零清除。/ N0 F7 o' i- A/ }
: V8 m5 o) O- P% ^& ^6 a
位 8 ALRAF:闹钟 A 标志 (Alarm A flag)
* P. h6 @2 v1 d( Y当时间/日期寄存器(RTC_TR 和 RTC_DR)与闹钟 A 寄存器 (RTC_ALRMAR) 匹配时,由: F! A/ Q* o6 ]( d7 b, f
硬件将该标志置 1。& x/ t0 h" T3 A
该标志由软件写零清除。& f% x) z/ H8 P

. ^+ n- \6 \6 `- O2 {( v5 e  |" b4 f位 7 INIT:初始化模式 (Initialization mode)- I/ O2 H! \7 b7 L+ L$ ], d* x
0:自由运行模式。
, Q! U& B* q; h8 D6 t/ |1:初始化模式,用于编程时间和日期寄存器(RTC_TR 和 RTC_DR)以及预分频器寄存器
" z; ~7 _2 ]4 ], q. q0 a(RTC_PRER)。计数器停止计数,当 INIT 被复位后,计数器从新值开始计数。& X" Q0 |6 [7 ~" g
+ s3 C+ M7 f+ @% n+ X  G
位 6 INITF:初始化标志 (Initialization flag)
! K2 L9 T2 G) i8 `3 k8 p8 H当此位置 1 时,RTC 处于初始化状态,此时可更新事件、日期和预分频器寄存器。: E# n1 q" `2 S7 d3 }+ Q, W
0:不允许更新日历寄存器。
4 j& f# d) i6 q5 K% H1:允许更新日历寄存器。0 T1 T, c5 o3 s6 `
8 i' K/ v1 n- C
位 5 RSF:寄存器同步标志 (Registers synchronization flag)8 C1 e2 r! u5 r. @! x
每次将日历寄存器的值复制到影子寄存器(RTC_SSRx、RTC_TRx 和 RTC_DRx)时,都
& W8 X# m; D3 Q! ?* w8 v( B$ o会由硬件将此位置 1。在初始化模式下、平移操作挂起时 (SHPF=1) 或在旁路影子寄存器模7 X0 o- g! n( F
式 (BYPSHAD=1) 下,该位由硬件清零。该位还可由软件清零。% x" a3 t& ]. A
0:日历影子寄存器尚未同步7 z3 ~- j  K: K1 M4 q5 G
1:日历影子寄存器已同步9 v. B/ Y* R. W: a
- g% f( K4 h* z* e
位 4 INITS:初始化状态标志 (Initialization status flag)
5 N$ P0 h1 D% C: E/ S) d" O当日历年份字段不为 0 时(上电复位状态),由硬件将该位置 1。& o! J1 R, z$ j2 j0 B. x1 k
0:日历尚未初始化6 Z" E4 D6 Z$ N& V- q
1:日历已经初始化5 c/ t% l! `8 V9 I- K; o" P+ `% C' g- K
/ N0 ~0 W# I1 i% c
位 3 SHPF:平移操作挂起 (Shift operation pending)' Y; m& _  s/ r" w' R7 V2 L. H+ m
0:没有平移操作挂起/ K! h: @8 T; h0 o
1:某个平移操作挂起6 H1 B+ d) A* i5 @
只要通过对 RTC_SHIFTR 寄存器执行写操作来启动平移操作,此标志便由硬件置 1。执行完+ }; D2 w( x6 n
相应的平移操作后,此标志由硬件清零。对 SHPF 执行写入操作不起作用。' a7 t6 b5 X: W

. F" }. e# s1 Z# }位 2 WUTWF:唤醒定时器写标志 (Wakeup timer write flag)# l/ h5 }) V$ H; I! h
在 RTC_CR 寄存器中的 WUTE 位置 0 后,当唤醒定时器值可更改时,由硬件将该位置 1。; M- t- r2 L' W- w$ f- A' [
0:不允许更新唤醒定时器配置
+ c8 @4 d& m7 ]1:允许更新唤醒定时器配置
1 X1 L2 }- E' W' V; T
" [: y9 f/ \0 Y/ `' |; X位 1 ALRBWF:闹钟 B 写标志 (Alarm B write flag)1 ?  O% v8 z5 m9 u3 y! S
在 RTC_CR 寄存器中的 ALRBIE 位置 0 之后,当闹钟 B 的值可更改时,由硬件将该位置 1。
/ ]/ H( x+ v  w: P* w! L# J( P8 U5 n该位在初始化模式下由硬件清零。
# m0 x9 D+ A. m3 H7 t$ T0:不允许更新闹钟 B
5 s$ N, \) L' x1:允许更新闹钟 B
# x4 J2 {5 q/ W
3 g& L8 d& \# \, \" L. y/ S0 A" b+ i, r位 0 ALRAWF:闹钟 A 写标志 (Alarm A write flag)
5 E: |1 h9 d8 p. q% p在 RTC_CR 寄存器中的 ALRAE 位置 0 后,当闹钟 A 的值可更改时,由硬件将该位置 1。* t: r/ t% S% ?5 u
该位在初始化模式下由硬件清零。6 ]& Z% T4 G7 y4 }$ J5 ^
0:不允许更新闹钟 A
4 {' w3 i9 D9 z1 ?1 X2 ^1:允许更新闹钟 A% r6 x! B. B' }

1 K5 v8 v# V) G! A+ u5.5 RTC 预分频器寄存器 (RTC_PRER)' ^9 h0 C) f4 {, h4 M/ [" J2 b
RTC prescaler register
' x% W8 K/ @$ c# f/ S  }4 j7 i偏移地址:0x108 t9 ?, h, B, O; {9 u
上电复位值:0x007F 00FF
, z* B1 O) Z  Q& o8 z系统复位:不受影响# t2 l/ h2 S$ O* K9 e

7 ~& Z. C6 d- l4 S" k6 E+ Y. N 20200908113553778.png 0 o: t; D# @/ C  v+ n) Z9 K
& c! c3 y! O; W8 X5 U: X$ p
5.6 RTC 唤醒定时器寄存器 (RTC_WUTR)
1 L; M+ Q" A' |) b8 _# P* p$ pRTC wakeup timer register
% D% A1 S+ T1 u" i7 ~偏移地址:0x141 N: M! {3 |' \: X6 B' {# [
上电复位值:0x0000 FFFF
/ \$ z7 S9 g3 S0 W( u系统复位:不受影响5 R9 k* ^% e/ s/ z7 K9 r, D

' {' l: S0 q6 }- z4 @* b  { 20200908113602522.png $ E  M& U) x: M6 r
( A. V# r7 C8 V9 N
位 31:16 保留0 e- E& Z; f; p0 ^- R" y% T
/ L7 L9 t( y, q5 B
位 15:0 WUT[15:0]:唤醒自动重载值位 (Wakeup auto-reload value bit): @" |5 r- h! ]# S& Y% q
当使能唤醒定时器时(WUTE 置 1),每 (WUT[15:0] + 1) 个 ck_wut 周期将 WUTF 标志置 1一次。ck_wut 周期通过 RTC_CR 寄存器的 WUCKSEL[2:0] 位进行选择。% u' g9 D' @; F; _
当 WUCKSEL[2] = 1 时,唤醒定时器变为 17 位,WUCKSEL[1] 等效为 WUT[16],即要重载到定时器的最高有效位。
2 i2 ~' u4 {# |' I, _
2 T' l' ?  l# m注意: WUTF 第一次置 1 发生在 WUTE 置 1 之后 (WUT+1) 个 ck_wut 周期。禁止在% q" k) W* O( `$ v6 o& u0 F! X
WUCKSEL[2:0]=011(RTCCLK/2) 时将 WUT[15:0] 设置为 0x0000 。
  `. T; @% m% \! q# T6 @
! H7 s) }4 Q% ?2 S' W! v- ?5.7 RTC 校准寄存器 (RTC_CALIBR)( f' k% B6 a# O: V' t. w
RTC calibration register
2 v# u/ `" A% Z2 S/ I7 T偏移地址:0x189 H8 W1 I; [4 \- {( T5 i8 h
上电复位值:0x0000 00002 j( Z$ ?- L8 l7 k" W6 H
系统复位:不受影响
9 }- Q' F8 |, Y6 U- a3 Q1 P( `. y+ p2 y5 `
20200908113611958.png
1 a4 Q" L8 {/ h+ T/ B' {' n6 @5 l
7 W/ p4 R! @% r+ Y( i. W6 Y- b5.8 RTC 闹钟 A 寄存器 (RTC_ALRMAR)
$ ?/ ^4 q; [' B, G9 ]0 tRTC alarm A register
3 u6 ~# B8 h7 r7 f! @! r$ u& h偏移地址:0x1C
  H; b) e, |0 D4 W( w上电复位值:0x0000 0000
" @4 L- U0 p4 |0 R* d系统复位:不受影响: g: X* U! c7 a

% s, S: ]% ^3 Y( q  V 20200908113624273.png
* h5 O' {4 @# J2 R# N% j% D
  S  X. W5 C* w: L! _位 31 MSK4:闹钟 A 日期掩码 (Alarm A date mask)% M3 R# c; ?  A
0:如果日期/日匹配,则闹钟 A 置 1
% L. L) f. [* l7 f1 E: p- ~1:在闹钟 A 比较中,日期/日无关
; [) G$ Y" T; I- n0 h) x8 Z/ `% b8 e/ B& Y) e, F- n  m0 e
位 30 WDSEL:星期几选择 (Week day selection)
1 M/ h2 W& z& M0:DU[3:0] 代表日期的个位
4 n$ x: j% t9 M6 T# H3 l+ x1:DU[3:0] 代表星期几。DT[1:0] 为无关位。! w2 A% r! n8 X# r2 ^3 k# Y

% b7 @# P0 \8 S位 29:28 DT[1:0]:日期的十位(BCD 格式)(Date tens in BCD format)。" n+ J# z2 {9 r/ R+ i5 J- a) s( @+ }

- V- x# Z& q8 T$ O! F; m1 k位 27:24 DU[3:0]:日期的个位或日(BCD 格式)(Date units or day in BCD format)。" R* [+ v: W1 I
: h# o3 e( x+ W6 G2 a
位 23 MSK3:闹钟 A 小时掩码 (Alarm A hours mask)5 y! B# l  L5 Q9 V6 D* Z0 G
0:如果小时匹配,则闹钟 A 置 1
; e* ~& L# {) o1 _2 F8 w1:在闹钟 A 比较中,小时无关
7 `' K/ V# d2 L1 \. p# W2 ~2 H4 d# f/ p( J6 G6 w
位 22 PM :AM/PM 符号 (AM/PM notation)
2 g$ d8 S! @9 z6 J" d0 V0:AM 或 24 小时制$ V* W+ v5 f: f4 ~) |8 {+ J
1:PM: S+ \; @1 Q1 c# k; Q- x

2 Q, _+ A# F2 v位 21:20 HT[1:0]:小时的十位(BCD 格式)(Hour tens in BCD format)。9 K7 `) `: F: ?

5 E; S2 i& ~5 P8 F% R5 K位 19:16 HU[3:0]:小时的个位(BCD 格式)(Hour units in BCD format)。
  J. \6 N5 c. Q& T- ?) _3 c
/ o8 {8 y2 D- M) k位 15 MSK2:闹钟 A 分钟掩码 (Alarm A minutes mask)
* `/ l; a2 F; E/ Q# S7 ~0:如果分钟匹配,则闹钟 A 置 1
" p' _/ P* S9 n/ \. I* a1:在闹钟 A 比较中,分钟无关6 o- d" g$ C5 t# D" \) G
8 r% q  v; [4 _& |3 B$ p
位 14:12 MNT[2:0]:分钟的十位(BCD 格式)(Minute tens in BCD format)。
8 |" G. Q6 z  `4 t( N( V3 A; P5 K- K2 K+ k4 J
位 11:8 MNU[3:0]:分钟的个位(BCD 格式)(Minute units in BCD format)。
) ]9 x1 Y$ `+ `% V  T/ J% t
' l. l  k# l! w8 z4 l+ r& g. T7 x位 7 MSK1:闹钟 A 秒掩码 (Alarm A seconds mask)8 I( {9 H" l) Z. G8 y% _6 v
0:如果秒匹配,则闹钟 A 置 1
% X8 a% _. p' T9 a. L3 ~: Y4 {
; F8 @  Y: ?! Z5 n; P3 h5 F1:在闹钟 A 比较中,秒无关: I+ B2 v; I2 x0 C
. c9 F( F% R. a" u* F
位 6:4 ST[2:0]:秒的十位(BCD 格式)(Second tens in BCD format)。
* I9 K6 M& g9 P4 \5 q位 3:0 SU[3:0]:秒的个位(BCD 格式)(Second units in BCD format)。1 H2 ]6 D: u3 }9 ^' ^0 b8 [
+ |, ?, u) o5 q8 B9 v9 _
5.9 RTC 写保护寄存器 (RTC_WPR), U( m8 h" O2 _' A9 o( N& P
RTC write protection register
7 L! I0 d) Y; F8 G- N7 X. b偏移地址:0x24
8 A( q+ S) o; B% U" _5 o6 B/ _# s& v复位值:0x0000 0000" O5 w& S$ O+ e# C$ J% a: \5 Y: ~

( P1 g+ P  k+ F2 e- s" G& L 20200908113639189.png
5 I7 u/ H3 q" o) t, Q5 P3 X. f6 {: T5 U% v0 F
5.10 RTC 亚秒寄存器 (RTC_SSR)$ h# h0 C. V: T9 u
RTC sub second register
3 t5 n2 V2 Q4 \/ D偏移地址:0x28
% a& q; @6 z7 y. w* ]上电复位值:0x0000 0000
* y- w' f3 a7 ?' f; a" U2 y6 Y5 F系统复位:当 BYPSHAD = 0 时为 0x0000 0000;当 BYPSHAD = 1 时不受影响。7 G5 b) @' M( G' n6 a
; `$ r. T. H( k! a! E! ]
20200908113649132.png - P) p4 W! M/ U" X: H. _
5 U. F$ W% l0 J8 x! V- E
5.11 RTC 时间戳时间寄存器 (RTC_TSTR)
0 H9 @8 S3 g3 W  I  V: D2 qRTC time stamp time register
; T* Y; w4 n, R4 g% k偏移地址:0x306 d, p3 X  H* s& v$ n0 }! j
上电复位值:0x0000 00006 k' e" l5 H6 Y; w/ ^  c2 ?
系统复位:不受影响
% X! h. p2 E" y3 U6 {' A! Q5 |
8 C7 \+ e+ c% ]# J. X- [ 20200908113659442.png
0 F9 A. w5 {* h$ `' K7 d4 Z
) J  I9 z7 g. Z! Y: z5.12 RTC 备份寄存器 (RTC_BKPxR)
- u- Z7 l$ [2 O. A8 kRTC backup registers
- x; t# g" g; ^0 `( m7 W; G# @偏移地址:0x50 到 0x9C
0 S, e$ Y; ?$ D上电复位值:0x0000 0000
2 R/ V9 \7 C6 ^6 D0 n+ g系统复位:不受影响) d# l: V8 r+ v- B
20200908113710124.png 7 j) |- p! b+ E2 v5 M

/ `) ~3 ?; s  c- ?3 ]8 E$ N, y( t* e

6 G$ f1 G- y9 X0 Y: W3 R# V/ i
" ~" W5 k7 g' Q
赞 收藏 评论0 发布时间:2022-3-29 09:41

举报

0个回答

所属标签

相似技术帖

官网相关资源

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