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

【经验分享】STM32 RTC详解

[复制链接]
STMCU小助手 发布时间:2022-6-14 13:54
01. RTC概述4 E0 v6 u; c9 ^8 B  J' m) C7 N
实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供一个日历时钟、两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。RTC 还包含用于管理低功耗模式的自动唤醒单元。
- U/ o0 D, x; L& O# O5 s
5 b2 Y1 M, Y$ Y' p; X1 T两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时(12 或 24 小时制)、星期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。9 Q% n, i- H. h+ E4 Q5 \

8 Y  X8 F$ c7 l0 d& A系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。并且还可以进行夏令时补偿。; {2 \6 m, {6 c
' n1 a# V; r4 _5 n1 p* O$ q# n
其它 32 位寄存器还包含可编程的闹钟亚秒、秒、分钟、小时、星期几和日期。此外,还可以使用数字校准功能对晶振精度的偏差进行补偿。' m' w# q( I3 U
$ b+ W, t1 {- m1 V0 t9 r0 i# N$ w
上电复位后,所有 RTC 寄存器都会受到保护,以防止可能的非正常写访问。8 S3 W7 ~0 g! H; W

% @; k0 N1 e1 {: q) q$ Q  |( j- J2 q无论器件状态如何(运行模式、低功耗模式或处于复位状态),只要电源电压保持在工作范围内,RTC 便不会停止工作。6 K) Y$ g  z5 \' M1 F

! L' x: i  y8 |0 J02. RTC主要特性

! ^6 J8 }2 {/ I" lRTC 单元的主要特性如下(参见 图 222 : RTC 框图 ):& w! R* E! Q1 w5 |  [
● 包含亚秒、秒、分钟、小时(12/24 小时制)、星期几、日期、月份和年份的日历。
9 y$ D! o) J; g+ [/ O● 软件可编程的夏令时补偿。
: b0 W) Q- W0 C' F- O% s● 两个具有中断功能的可编程闹钟。可通过任意日历字段的组合驱动闹钟。
* N6 P6 U5 V) `$ z+ |● 自动唤醒单元,可周期性地生成标志以触发自动唤醒中断。
) Z8 [, [3 a* a+ g$ Q/ y& ^5 t! G● 参考时钟检测:可使用更加精确的第二时钟源(50 Hz 或 60 Hz)来提高日历的精确度。
+ c! G1 Z  T9 c. _● 利用亚秒级移位特性与外部时钟实现精确同步。
: H' j1 U- H0 {8 D0 @* }9 s● 可屏蔽中断/事件:7 g6 Q( x7 [$ ^% z3 _0 C
— 闹钟 A" s) w( L# H' x* ~2 C
— 闹钟 B, ]: X& H0 a: q# n7 U; \
— 唤醒中断; G9 D* F: @. @) b8 x
— 时间戳8 h% j& v3 `9 n# i; `7 ?* s
— 入侵检测
' y+ h/ \  v9 s: K. H" k% K9 e7 N0 j● 数字校准电路(周期性计数器调整)0 g7 l: g6 y6 r8 D5 z! n( _# W
— 精度为 5 ppm
, F9 _% B* |/ e6 C" g% b— 精度为 0.95 ppm,在数秒钟的校准窗口中获得
' Y" y" O" i1 @) P! ]7 L● 用于事件保存的时间戳功能(1 个事件)0 u$ A' }; T* ~6 j" l  R& M$ D! u
● 入侵检测:
/ l7 S) N2 r/ {— 2 个带可配置过滤器和内部上拉的入侵事件
. N* \; }+ a- n7 }: W( G● 20 个备份寄存器(80 字节)。发生入侵检测事件时,将复位备份寄存器。/ P' T( g  I1 |

  L) ]( ~/ k  K* p● 复用功能输出 (RTC_OUT),可选择以下两个输出之一:
) a6 H$ v1 H" U— RTC_CALIB:512 Hz 或 1 Hz 时钟输出(LSE 频率为 32.768 kHz)。' ~9 t4 r) ^0 P; }. N8 \
可通过将 RTC_CR 寄存器中的 COE[23] 位置 1 来使能此输出。该输出可连接到器件 RTC_AF1 功能。4 S* J+ b+ O# d) }& D. O
— RTC_ALARM(闹钟 A、闹钟 B 或唤醒)。
6 u& C+ o- S2 @, o, G; O" c可通过配置 RTC_CR 寄存器的 OSEL[1:0] 位选择此输出。该输出可连接到器件RTC_AF1 功能。
' Z$ M7 n: {' k8 k9 @2 ?● RTC 复用功能输入:- X% ~$ g& c7 Q/ I+ z
— RTC_TS:时间戳事件检测。该输入可连接到器件 RTC_AF1 和 RTC_AF2 功能。
( Y$ ~' K: n& u1 K— RTC_TAMP1:TAMPER1 事件检测。该输入可连接到器件 RTC_AF1 和 RTC_AF2功能。- U3 z0 t' }# v9 f! P0 B3 I
— RTC_TAMP2:TAMPER2 事件检测。+ E5 _3 B& {5 s2 J. \$ y8 b
— RTC_REFIN:参考时钟输入(通常为市电,50 Hz 或 60 Hz)。
. v6 S7 ?- p$ I! v& y5 M9 Q" ?  U) v+ B3 H/ B9 a( j
QWU@55485$%0L_8BCJNENAX.png $ w* V3 e7 W* \, O6 Y

' T" H6 N6 y% A+ o4 M* b( R03. RTC部分功能6 ~* V7 F, L4 y2 g
3.1 时钟和预分频器

( I8 ?$ `& q0 o5 I% F" V0 }RTC 时钟源 (RTCCLK) 通过时钟控制器从 LSE 时钟、LSI 振荡器时钟以及 HSE 时钟三者中选择。有关 RTC 时钟源配置的更多信息,请参见 第 6 节:复位和时钟控制 (RCC)。
# U, ^$ L* V7 o$ S! ~
. T" I9 \9 m/ Y& e可编程的预分频器阶段可生成 1 Hz 的时钟,用于更新日历。为最大程度地降低功耗,预分频器分为 2 个可编程的预分频器(参见 图 222 : RTC 框图 ):% m, R6 S& j' H4 w
● 一个通过 RTC_PRER 寄存器的 PREDIV_A 位配置的 7 位异步预分频器。2 F- ^5 ]' T# c3 B+ f
● 一个通过 RTC_PRER 寄存器的 PREDIV_S 位配置的 15 位同步预分频器。
- V; }' V& a: N3 A: C, g2 `! f3 \; C9 }" H& U2 u1 ?
注意: 使用两个预分频器时,推荐将异步预分频器配置为较高的值,以最大程度降低功耗。, `! f) {0 H& t, p$ ]* W

9 S- T. y5 @/ h8 m1 m- ^要使用频率为 32.768 kHz 的 LSE 获得频率为 1 Hz 的内部时钟 (ck_spre),需要将异步预分频系数设置为 128,并将同步预分频系数设置为 256。分频系数的最小值为 1,最大值为 2 ^22 。这对应于约为 4 MHz 的最大输入频率。f ck_apre 可根据以下公式得出:* n. w4 \1 f  [& q! F( _  a- q
9 W3 |5 X, g3 W$ a% S
SVD31@~7MZ7XGEY{Y`]M2)O.png
) [! g) z  A0 h; K
( W8 O, I. D% t) h3.2 实时时钟和日历
2 O9 D5 S4 p7 \/ yRTC 日历时间和日期寄存器可通过与 PCLK1(APB1 时钟)同步的影子寄存器来访问。这些时间和日期寄存器也可以直接访问,这样可避免等待同步的持续时间。
0 E$ S: E  _+ v/ A  m7 h9 K4 n4 p3 Q: @# W4 i; A! b) M
● RTC_SSR 对应于亚秒
- T7 z5 u. J% B; w1 Y0 k6 c4 V● RTC_TR 对应于时间
3 Z/ }0 x) P: p2 y* _( e● RTC_DR 对应于日期
1 @* P! i: a+ Y5 {; P+ \! {6 _4 u% H  `1 S, f7 Z
每隔两个 RTCCLK 周期,便将当前日历值复制到影子寄存器,并将 RTC_ISR 寄存器的 RSF位置 1(请参见 第 23.6.4 节 )。在停机和待机模式下不会执行复制操作。退出这两种模式时,影子寄存器会在最长 2 个 RTCCLK 周期后进行更新。+ M. I- l& K# y, N* W: {
2 O: G. l4 r7 H5 \4 c" {" U
当应用读取日历寄存器时,它会访问影子寄存器的内容。也可以通过将 RTC_CR 寄存器的BYPSHAD 控制位置 1 来直接访问日历寄存器。默认情况下,该位被清零,用户访问影子寄存器。% A8 O% [* [0 ?- a7 F8 Y
$ b  }1 @" O  A0 p' N7 c
在 BYPSHAD=0 模式下读取 RTC_SSR、RTC_TR 或 RTC_DR 寄存器时,APB 时钟频率(f APB ) 必须至少为 RTC 时钟频率 (f RTCCLK ) 的 7 倍。影子寄存器通过系统复位来复位。; T$ ]- E5 }  o) H

( ^5 N2 }, z+ l( g, J# @04. RTC低功耗模式和中断. s: ^" C- G. u
低功耗模式6 T! y8 ?) S5 D. b$ a) q4 V4 E
7 h0 @' a$ z3 o' q
B_83O1WZD{B7MH_E9ZA]9RD.png ( M; y3 C; i; I7 z: h9 W
) @8 ^6 s' L* ?" y3 V7 L; L
RTC中断

" [. o& K) N) `4 e: O& c7 T9 B" f
1 @/ q6 {4 t0 R7 [所有 RTC 中断均与 EXTI 控制器相连。
( q7 P1 o1 s( ^2 b" ~' J$ K4 x- ~4 T" a9 P3 U* d9 |3 b
要使能 RTC 闹钟中断,需按照以下顺序操作:3 o1 b' g7 `3 F' d  {
! b" l( g% z+ C% _+ l
1.将 EXTI 线 17 配置为中断模式并将其使能,然后选择上升沿有效。& G2 J) C) I) X, z2 R
! P% S% U2 K3 k4 N; M
2.配置 NVIC 中的 RTC_Alarm IRQ 通道并将其使能。
6 h. n/ t9 t- N$ M! S; V
, R7 K0 I: Z  ^3.配置 RTC 以生成 RTC 闹钟(闹钟 A 或闹钟 B)。# y' u# E* {7 J; b/ u, \+ w) P
" h- a2 C- a. C/ n( M" t/ m
要使能 RTC 唤醒中断,需按照以下顺序操作:' y# y, J2 Y6 `6 Y$ b3 L

$ S; x# |$ Z/ j1 N4 H) N3 f1.将 EXTI 线 22 配置为中断模式并将其使能,然后选择上升沿有效。3 k: L$ j2 ]! `5 E' O3 N/ n

& X- c* D! }0 h3 J: H& S2.配置 NVIC 中的 RTC_WKUP IRQ 通道并将其使能。2 _* o& g& X% W

& S: A: n+ E0 ^3 M8 |3.配置 RTC 以生成 RTC 唤醒定时器事件。) V9 `3 L! h* y8 }* t8 B1 m

2 _( H& x+ q8 P- g8 F* T- v0 P/ H: P& t$ o' m
要使能 RTC 入侵中断,需按照以下顺序操作:& ]1 O7 X  i+ M3 [2 v3 t/ l

  ^/ E1 m6 [3 a6 W" x1.将 EXTI 线 21 配置为中断模式并将其使能,然后选择上升沿有效。
" [3 ^) m$ B; t1 v* C
$ t, F4 B3 B7 w+ o2.配置 NVIC 中的 TAMP_STAMP IRQ 通道并将其使能。
! z9 S* K8 ?- Q& d: l9 H/ |( N3 ]/ s6 `+ D, V" F7 L
3.配置 RTC 以检测 RTC 入侵事件。- \- R" h/ a0 N$ O0 h) X, a

6 x- O. C: t6 M* a8 W! }. o# i  r, X. k
要使能 RTC 时间戳中断,需按照以下顺序操作:% n' e! `# ?* y$ ]9 T9 p' Y

3 P3 J) ~: N% S& i' f. v1.将 EXTI 线 21 配置为中断模式并将其使能,然后选择上升沿有效。) V1 w; h1 K, _9 H& y) N# k
& n$ ?( S1 S/ u+ T
2.配置 NVIC 中的 TAMP_STAMP IRQ 通道并将其使能。
; d2 q, K( d7 @; x0 z
2 B! L7 [% s' u& j" q6 t3.配置 RTC 以检测 RTC 时间戳事件。0 N% d, k  w! Q- R& Q1 Q
% D# j8 |6 P1 N# ?6 p
7FD`(L)G5C`IU1SE7XPCX`M.png / K' z% G; e/ Z' [0 l0 Z
( N4 a& K1 P& x
05. RTC寄存器
5 ?+ r# A  O: \' b1 X4 e5.1RTC 时间寄存器 (RTC_TR)
* M2 X; E) e2 r2 U7 {0 }
RTC time register: N, ^/ w2 z" ~, z+ k
RTC_TR 是日历时间影子寄存器。只能在初始化模式下对该寄存器执行写操作。% `# i5 Y# Z( t9 ~/ _
偏移地址:0x00
/ t* U( P/ L/ T3 w5 O上电复位值:0x0000 00006 `0 O. {& p% s5 G. y; z
系统复位:当 BYPSHAD = 0 时为 0x0000 0000;当 BYPSHAD = 1 时不受影响。: N$ c& }2 E2 F# V+ [

( L! J- h+ h6 R; d. E# d U$B]P6UJV9D)(LHI0~94~QK.png 0 e3 }7 a- ]6 G0 P

5 Z! [' y* C0 y7 {8 d6 ]$ p5.2 RTC 日期寄存器 (RTC_DR)
& U. a0 g: X$ z! N9 \3 U) \% dRTC date register
; ?( m* |$ z7 `0 QRTC_DR 是日历日期影子寄存器。只能在初始化模式下对该寄存器执行写操作。
% e, n9 C! m- m* \8 M, F偏移地址:0x041 e! b0 r( b7 i/ M
上电复位值:0x0000 21014 G5 ?* `- G; P5 J, I% U
系统复位:当 BYPSHAD = 0 时为 0x0000 2101;当 BYPSHAD = 1 时不受影响; G% x. \- d" v

6 T6 }- ?8 M" K! e# V  k8 u% m+ X! G IFLY4_UN7T(%ZC[WQHXO]P6.png
+ _+ m. L/ r4 H, I* v& a. B; ^+ p, ^' R5 y1 }4 Z
5.3 RTC 控制寄存器 (RTC_CR)
8 N+ |& A, G# L8 V& x$ RRTC control register
7 B9 e' i+ ^5 g/ x% U偏移地址:0x08
" H# W1 q# w. A9 F上电复位值:0x0000 0000) y# G& j) R' c' H: f! J/ k* \
系统复位:不受影响
8 e8 }$ `0 W0 z9 ^; I' ^8 c" b, X& D% u
PSPVOZJ(RG7TD[0X{_J6328.png " {+ w1 n$ n6 s: `4 j2 h: u' N
3 \3 `- n8 L6 ]$ I. `
位 22:21 OSEL[1:0]:输出选择 (Output selection)
  g! M  L- w# Q这些位用于选择要连接到 RTC_ALARM 输出的标志# D- B; k9 S0 J, Y5 j! [
00:禁止输出
3 d$ f6 L7 A3 [* }% q8 D& n; T0 w01:使能闹钟 A 输出. [4 J% Y$ n+ F! s6 \' Y
10:使能闹钟 B 输出
+ ^$ t' U; l+ I  Q- N+ a( i+ x11:使能唤醒输出
  J) Z! B# ~. m& A( [1 B" A+ i5 D位 20 POL:输出极性 (Output polarity)% A2 @& m% R, T$ ?% p. b
该位用于配置 RTC_ALARM 输出的极性
2 C5 A( D+ u! ^* p! v. L0 M; Z7 O0:当 ALRAF/ALRBF/WUTF 置 1 时(取决于 OSEL[1:0]),该引脚为高电平
4 P& A& d& Z& B& c! C& d$ f+ _1:当 ALRAF/ALRBF/WUTF 置 1 时(取决于 OSEL[1:0]),该引脚为低电平
: f& I9 q+ V3 w& X位 19 COSEL:校准输出选择 (Calibration output selection)
/ _( |7 L0 w6 _7 ]+ T0 W当 COE=1 时,该位可选择 RTC_CALIB 上输出的信号。1 H: P" m- [# o
0:校准输出为 512 Hz
( Q! k" x7 \8 K0 @7 G1:校准输出为 1 Hz1 \" A$ m* ?) M0 ]7 ?
在 RTCCLK 为 32.768 kHz 且预分频器为其默认值(PREDIV_A=127 且 PREDIV_S=255)
, Y# j8 a$ ~1 h3 |# ^' }的条件下,这些频率有效。请参见 第 23.3.14 节:校准时钟输出 。
, d& l7 r+ K. h( y& f0 P/ R位 18 BKP:备份 (Backup)
, l6 ^  h  @$ [" ]& V) g+ S; e4 \用户可对此位执行写操作以记录是否已对夏令时进行更改。% H# `: |& A4 S) g) ^- `
位 17 SUB1H:减少 1 小时(冬季时间更改)(Subtract 1 hour (winter time change))" p4 ?+ V% a0 p* I1 ~) m! Z; Q2 j1 J
当该位在初始化模式以外的模式下置 1 时,如果当前小时不是 0,则日历时间将减少 1 小2 U. `$ U' e) e3 S& l' a4 b: Q  Z
时。此位始终读为 0。
8 j& Z) O9 h* W, j7 H" K1 a当前小时为 0 时,将此位置 1 没有任何作用。$ X+ p9 X  _; n$ m5 G' s  g
0:无作用。! W# W" @9 K2 @& U
1:将当前时间减少 1 小时。这可用于冬季时间更改。
  Y; C  c5 R- S6 Y# v* H; f/ e: E位 16 ADD1H:增加 1 小时(夏季时间更改)(Add 1 hour (summer time change))
+ m1 B3 |- N6 l+ v当该位在初始化模式以外的模式下置 1 时,日历时间将增加 1 小时。此位始终读为 0。
4 ]1 p" b, t. K7 b3 t7 e& [+ g' a0:无作用。
: k: q1 }4 K+ X5 C6 `& p1 g, g, Z1:将当前时间增加 1 小时。这可用于夏季时间更改1 l- f6 q: O; Q4 a. x) u& }
位 15 TSIE:时间戳中断使能 (Timestamp interrupt enable)4 q, v+ w, R- R: F3 {" f
0:禁止时间戳中断
* v% P/ q* f, M) c" G1:使能时间戳中断/ K- e2 ]7 }! T' S9 l$ B
位 14 WUTIE:使能唤醒定时器使能 (Wakeup timer interrupt enable)# b& |) w# i3 ~6 W3 E
0:禁止唤醒定时器中断
0 S  ^1 }9 A( T' |" b# g1:使能唤醒定时器中断
8 N  U/ C. i2 e位 13 ALRBIE: 闹钟 B 中断使能 (Alarm B interrupt enable)
% o8 r5 A) ~# p. ]& d0:闹钟 B 中断禁止0 Y' s6 o1 e! I* Q
1:闹钟 B 中断使能
2 Z& ~* k2 J1 Z( V  s位 12 ALRAIE:闹钟 A 中断使能 (Alarm A interrupt enable)
7 I  r, g3 h2 i$ c2 M/ k) ^: e0:禁止闹钟 A 中断7 g+ Z- L9 w8 Q. b2 {8 M
1:使能闹钟 A 中断
& B6 [/ N, I% W  ], v) f位 11 TSE:时间戳使能 (Time stamp enable)0 ~+ H* h: `6 {& m6 O5 u
0:禁止时间戳
4 U, V- V; L7 V8 E! W2 J1:使能时间戳
4 i$ s7 J3 O+ s3 L* O# a$ ?位 10 WUTE:唤醒定时器使能 (Wakeup timer enable)
: b/ C4 a, v! a6 P7 E  Z0:禁止唤醒定时器0 e% X3 X7 E# G' ^" u3 a) h
1:使能唤醒定时器
) a$ e6 n) o, \4 n; ]0 b- m. c  l- L/ J* w7 j
位 9 ALRBE: 闹钟 B 使能 (Alarm B enable)4 G1 f2 n1 u; M2 _% |
0:禁止闹钟 B
# u" A: _- R" e, d4 M4 L1:使能闹钟 B
- l1 s, W! I9 H$ b5 [位 8 ALRAE :闹钟 A 使能 (Alarm A enable)
' A. M+ I9 f) x- {# d4 |0:禁止闹钟 A
, U  g( s, [" h( G# Z- |* c1:使能闹钟 A
& G( E; ^+ c1 D& H( }位 7 DCE :粗略数字校准使能 (Coarse digital calibration enable)
/ [* A% b+ r& T5 I" o, Z0:禁止数字校准
0 T+ v: g: v6 f( `8 R1:使能数字校准9 B+ L/ N. n/ {& d; t
PREDIV_A 必须大于或等于 6( j+ a4 ?2 H' y9 r, X
位 6 FMT:小时格式 (Hour format)% E. V: ~" Y, h1 a: {
0:24 小时/天格式
9 n3 h* ]' _5 D3 O1:AM/PM 小时格式8 e9 }& q/ @2 u8 `! i
位 5 BYPSHAD:旁路影子寄存器 (Bypass the shadow registers)
) x+ r6 E1 X& W0:日历值(从 RTC_SSR、RTC_TR 和 RTC_DR 读取时)取自影子寄存器,该影子寄存器& }; x. P: r" I5 \7 k6 V
每两个 RTCCLK 周期更新一次。
* U3 E2 N" W$ S7 |1:日历值(从 RTC_SSR、RTC_TR 和 RTC_DR 读取时)直接取自日历计数器。
2 c/ |4 I( L! U+ x/ N; X注意:如果 APB1 时钟的频率低于 7 倍的 RTCCLK 频率,则必须将 BYPSHAD 置“ 1 ”。; N) g# h2 n8 g* X# l! B, U
位 4 REFCKON:参考时钟检测使能(50 Hz 或 60 Hz)(Reference clock detection enable (50 or9 w/ Y( V9 l3 O; g1 p
60 Hz))
5 Z- ?) ?0 A+ R3 r0:禁止参考时钟检测) O1 a! e% _: s8 j# V: m" Q
1:使能参考时钟检测0 ~8 F: b8 ~6 M0 @7 |
注意: PREDIV_S 必须为 0x00FF 。6 Q6 w1 \1 `3 Q! g# `+ G& r
位 3 TSEDGE:时间戳事件有效边沿 (Timestamp event active edge)
1 F5 q0 M+ [, T, T! w) Y/ P0:TIMESTAMP 上升沿生成时间戳事件$ B  f4 |9 _6 g; |% _. L$ ?' k( R0 Z
1:TIMESTAMP 下降沿生成时间戳事件: f% B/ _6 k7 g0 q" K4 E+ `$ I9 n
TSEDGE 发生更改时,必须复位 TSE 以避免将 TSF 意外置 1! o& L- K6 o+ ]1 ^. U4 h
位 2:0 WUCKSEL[2:0]:唤醒时钟选择 (Wakeup clock selection)
6 \3 p6 z# n* g000:选择 RTC/16 时钟
  G5 l' Z" ?$ G  d# @% V001:选择 RTC/8 时钟
0 r; J) R4 N7 Y& X4 Z# y4 O" O010:选择 RTC/4 时钟" h# d% v3 [# N) o: l5 a# C$ T
011:选择 RTC/2 时钟" B! |- i' H2 a1 U
10x:选择 ck_spre 时钟(通常为 1 Hz)
& O6 L5 k0 e9 N7 k! W% @11x:选择 ck_spre 时钟(通常为 1 Hz)并将 WUT 计数器值增加 2 16 (见下面的注释)! P2 G$ m, D/ [# A& H& d6 ]
2 V& k* u  a( M- }: q% h8 f
温馨提示+ N' n0 k( J# S6 i" I0 G
* ?' u$ W: `7 O( @# j1 l  u
WUT = 唤醒单元计数器值。当 WUCKSEL[2:1 = 11] 时, WUT = (0x0000 to 0xFFFF) +0x10000 (增加的值)。
" M. [' t0 C! ^  Q8 }2 O2 Z+ e只能在初始化模式下 (RTC_ISR/INITF = 1) 对该寄存器的位 7 、 6 和 4 执行写操作。1 G* H& O9 a4 {- X$ z
只能在 RTC_CR WUTE 位 = 0 且 RTC_ISR WUTWF 位 = 1 时对该寄存器的位 2 到 0 执行写操作。0 n- t9 l( m& e* ]
建议不要在日历小时递增时更改小时,因为这样做会屏蔽日历小时的增量。ADD1H 和 SUB1H 的更改在下一秒生效。: m( |7 Y% f% R- T0 g! k3 W6 x* T, b
此寄存器受写保护。第 576 页的 RTC 寄存器写保护中介绍了写访问的过程。
! E8 }- V& B$ p3 B! B( e6 Q6 O* D1 x) Z5 N+ u( j8 P* W1 V
5.4 RTC 初始化和状态寄存器 (RTC_ISR)
" Q" f. S+ ]& C, S+ n' ARTC initialization and status register
1 _7 U5 l5 m# a3 \4 q偏移地址:0x0C4 }9 p2 W5 l; d8 k$ T3 g) z% T
上电复位值:0x0000 0007
! p% \* y$ }$ m4 e3 u# I系统复位值:不受影响(INIT、INITF 和 RSF 除外,它们在复位时被清零)。/ A4 @& F' V" v5 E* T

& I! g1 p' }9 z- `/ L1 \; _; f9 _ ]}Z1$XQLX[YFOZB75Q})~A8.png
* n( l' u( b0 R# Z& u4 l; H3 x$ c6 h. W' l" L0 S
位 31:17 保留- v* H% N3 R5 ]$ k; }, M0 J

+ S& p$ a: Q8 Q  J" ]; C位 16 RECALPF:重新校准挂起标志 (Recalibration pending Flag)5 _% z9 _* m, i+ K# X# L2 P
当软件对 RTC_CALR 寄存器执行写操作时,RECALPF 状态标志将自动置“1”,指示
+ j% j5 u. ^2 f* W' n+ b( MRTC_CALR 寄存器已屏蔽。当采用新的校准设置时,该位恢复为“0”。请参见 动态重校准一节。
0 E2 c" ]4 `( `8 ]2 d) y  [9 `$ g3 P* s5 C( O- Y5 J
位 15 保留,必须保持复位值。
& X& y! ?) j4 ]$ |' F' x; F) t
& i. S& T- `8 D8 X位 14 TAMP2F:TAMPER2 检测标志 (TAMPER2 detection flag)
* F& @0 z8 E2 M2 L/ K3 y在入侵输入 2 上检测到入侵检测事件时,由硬件将此标志置 1。该标志由软件写零清除。, |' G4 v$ T! t% j0 e
2 `! y+ x( Y+ r. @1 D
位 13 TAMP1F:入侵检测标志 (Tamper detection flag)
: B* D  s0 e8 {当检测到入侵检测事件时,由硬件将此标志置 1。
! C9 {( w6 T2 `; [) s. j" p2 C6 p该标志由软件写零清除。
3 Y8 P! h0 k$ I' d. s' ^6 Y' X6 C( a5 p/ s
位 12 TSOVF:时间戳溢出标志 (Timestamp overflow flag)
+ ?$ d* K6 ]' |  V, y3 T9 q当在 TSF 已置 1 的情况下发生时间戳事件时,由硬件将此标志置 1。' Y6 N" m8 L  ?- Z# n0 y
该标志由软件写零清除。建议仅在 TSF 位清零之后再检查并清零 TSOVF 位。否则,如果时" ]/ c+ C" M5 o5 g1 V+ W. C
间戳事件恰好在清零 TSF 位之前刚刚发生,则溢出事件可能会被漏掉。2 ~' [  O) j2 R+ `, V9 O
" f& o8 |# ~3 Y: ?
位 11 TSF:时间戳标志 (Timestamp flag)
- e0 X0 R5 ]3 ^/ z* |: v发生时间戳事件时,由硬件将此标志置 1。
  `" h! A/ w. z) U  B, W该标志由软件写零清除。; }0 Y& O% l6 W3 c/ j+ P# S

' Z# z" Y: r& C/ q6 z0 a" p* o位 10 WUTF:唤醒定时器标志 (Wakeup timer flag)( C. l- t0 {% S2 W0 C
当唤醒自动重载计数器计数到 0 时,由硬件将此标志置 1。
% b' j$ y) [9 D( M- G8 r" P该标志由软件写零清除。! D' L' o; z/ {9 X* l  g
软件必须在 WUTF 再次置 1 的 1.5 个 RTCCLK 周期之前将该标志清零。
3 K' l# `# {& p3 P1 x  Y7 X
* w1 z. W: Z4 o4 |; ]2 z7 ^5 n位 9 ALRBF:闹钟 B 标志 (Alarm B flag)
5 j. @" _4 Q2 o0 e* c* C: \* l当时间/日期寄存器(RTC_TR 和 RTC_DR)与闹钟 B 寄存器 (RTC_ALRMBR) 匹配时,由
5 n. S4 M1 }$ u6 `. N) g硬件将该标志置 1。+ }& `6 t! V5 {8 p! U7 x5 Y
该标志由软件写零清除。
( C  ~1 l) q4 a0 J, d6 z1 Y4 p8 {3 @2 z; ~5 a7 l( _
位 8 ALRAF:闹钟 A 标志 (Alarm A flag)  _8 e! l% i) L2 I* ~8 f
当时间/日期寄存器(RTC_TR 和 RTC_DR)与闹钟 A 寄存器 (RTC_ALRMAR) 匹配时,由
  D# l1 l+ Z0 ]9 W& e0 _硬件将该标志置 1。  @2 u& M  k) q0 |: B; T
该标志由软件写零清除。
7 u, ], j1 ]* B
4 d& s# N% N& U位 7 INIT:初始化模式 (Initialization mode)6 Z5 y$ x5 X0 {5 z& }" F: `; J
0:自由运行模式。
: X( c! s/ N; s1:初始化模式,用于编程时间和日期寄存器(RTC_TR 和 RTC_DR)以及预分频器寄存器% R( R. x* k0 Q+ \
(RTC_PRER)。计数器停止计数,当 INIT 被复位后,计数器从新值开始计数。
, S0 Q* p0 f. |% Y% W) {/ `+ B4 Z0 u7 y4 h. }
位 6 INITF:初始化标志 (Initialization flag)8 d2 {, s! A; P5 G& m
当此位置 1 时,RTC 处于初始化状态,此时可更新事件、日期和预分频器寄存器。
7 A9 k9 t* s/ x2 S: T0:不允许更新日历寄存器。
% |5 P% _" F+ G1:允许更新日历寄存器。- f7 }! E) x* e2 ^) l# I

/ b( w3 f7 P) c/ s: X2 [8 Z: M位 5 RSF:寄存器同步标志 (Registers synchronization flag)9 o9 L" J" l9 F$ e, |- Y
每次将日历寄存器的值复制到影子寄存器(RTC_SSRx、RTC_TRx 和 RTC_DRx)时,都
. D& x: T6 V8 f$ l& ?4 L' r  ?7 L) m会由硬件将此位置 1。在初始化模式下、平移操作挂起时 (SHPF=1) 或在旁路影子寄存器模" l9 S0 F- E9 F$ Z+ K2 ~6 K% U6 ^
式 (BYPSHAD=1) 下,该位由硬件清零。该位还可由软件清零。
2 m- f( y- `3 x' L! }, v0:日历影子寄存器尚未同步
( ~7 d. h! m5 Z/ u* e9 T1:日历影子寄存器已同步+ |; u) [, _- X6 C! m3 B" [

/ o- _1 G* Q- f. a* y位 4 INITS:初始化状态标志 (Initialization status flag)1 N( E8 B! i$ Z3 U& T+ Z
当日历年份字段不为 0 时(上电复位状态),由硬件将该位置 1。
  ~! _" d2 C. T) E" L" T: A0:日历尚未初始化  E6 i& {8 g* f% ?4 v) e* X, b  Q
1:日历已经初始化* e4 ^, G+ L6 L0 q" ], C
4 [  I3 y6 [5 ]( k* ?
位 3 SHPF:平移操作挂起 (Shift operation pending)5 q; g& z: u* [; k- _4 D
0:没有平移操作挂起! y2 f: y: d( u! S; u. C
1:某个平移操作挂起
" P$ s) T4 @6 O, ~# H只要通过对 RTC_SHIFTR 寄存器执行写操作来启动平移操作,此标志便由硬件置 1。执行完3 z' ?7 ~* E1 L5 t1 {
相应的平移操作后,此标志由硬件清零。对 SHPF 执行写入操作不起作用。0 h% h& ]2 O# T0 Y# D7 o9 c

# L  g$ b" d8 ]位 2 WUTWF:唤醒定时器写标志 (Wakeup timer write flag)& `) M& V$ y% w7 f& o
在 RTC_CR 寄存器中的 WUTE 位置 0 后,当唤醒定时器值可更改时,由硬件将该位置 1。! Z, X5 u" H6 ?
0:不允许更新唤醒定时器配置. a; n4 e9 M; M9 @9 |3 c9 d
1:允许更新唤醒定时器配置+ o! \/ ]8 H2 k% n( M9 x. Y
: [! X6 C) @" f+ S% L
位 1 ALRBWF:闹钟 B 写标志 (Alarm B write flag)6 u0 J, o+ h: r9 |- d$ K8 x  ~/ U
在 RTC_CR 寄存器中的 ALRBIE 位置 0 之后,当闹钟 B 的值可更改时,由硬件将该位置 1。+ k+ i# I) J# o) L0 Z! K
该位在初始化模式下由硬件清零。; g# O9 t+ z: M
0:不允许更新闹钟 B9 i; f- \( M% ]" }* k
1:允许更新闹钟 B0 Z$ V# ?7 S, Z  L7 O' r* y! n
! b+ g! x% ?; P% }8 P
位 0 ALRAWF:闹钟 A 写标志 (Alarm A write flag)3 v. D  ]$ _, F6 [7 ]1 K
在 RTC_CR 寄存器中的 ALRAE 位置 0 后,当闹钟 A 的值可更改时,由硬件将该位置 1。
4 i" {8 ^% V$ `( ^: g5 }9 a该位在初始化模式下由硬件清零。
, v* w  e2 ?: V. Z: ~0:不允许更新闹钟 A
7 J, n/ i5 |3 q' r1:允许更新闹钟 A- E; N" K" W0 K  g; O
( ^- ], R8 V: e: }5 |% H& L
5.5 RTC 预分频器寄存器 (RTC_PRER)& S) }* ?& o; d6 ~( R
RTC prescaler register
, |0 s( T7 W" O" J8 L5 u偏移地址:0x10) v+ \5 h+ A; a% T- H; [
上电复位值:0x007F 00FF
% J4 `0 Y. A0 }) |. R系统复位:不受影响
: ?5 z: O6 ~# I, d; n, I, |2 V* W& |5 u2 e
0PGZ{U_(`T_IE7OW[[3%BOS.png
- u2 v1 R; H' T8 \6 f. l0 g
% v. z( E! W! |. N5.6 RTC 唤醒定时器寄存器 (RTC_WUTR)
' S( t. ]  }7 k' dRTC wakeup timer register
8 n9 {4 c, E9 O0 G6 M+ V9 ~偏移地址:0x14
8 I/ N4 i8 p  I' J上电复位值:0x0000 FFFF
/ J$ j: Y) C1 v1 t) C1 |8 M2 [+ I系统复位:不受影响# K0 f- }5 c4 i; \  R% b( n

6 r# K0 B7 ?' D. E7 ] 20200908113602522.png 9 G9 C- T. \# m- U* g

5 K( D' s2 t1 [+ d: J- W8 L' a6 n位 31:16 保留
4 z# i0 i! r' _6 [" p
- A! l! ]0 t0 o位 15:0 WUT[15:0]:唤醒自动重载值位 (Wakeup auto-reload value bit)
. N" m# b4 \9 ]+ l0 y, m) Z3 Z当使能唤醒定时器时(WUTE 置 1),每 (WUT[15:0] + 1) 个 ck_wut 周期将 WUTF 标志置 1一次。ck_wut 周期通过 RTC_CR 寄存器的 WUCKSEL[2:0] 位进行选择。
( g2 N) U, Y) i/ \当 WUCKSEL[2] = 1 时,唤醒定时器变为 17 位,WUCKSEL[1] 等效为 WUT[16],即要重载到定时器的最高有效位。
' \2 w8 [% h: R, `2 z3 W& [; i5 ~7 |3 |
2 q( p* m+ H) V注意: WUTF 第一次置 1 发生在 WUTE 置 1 之后 (WUT+1) 个 ck_wut 周期。禁止在
% k  P9 b* r, \& A# X, R1 F  a* aWUCKSEL[2:0]=011(RTCCLK/2) 时将 WUT[15:0] 设置为 0x0000 。: Y) \; z7 V/ [# N' K, ?
1 G8 F$ \4 B: M4 Z% I$ H3 D/ ]
5.7 RTC 校准寄存器 (RTC_CALIBR)
# {2 Y2 q1 f; IRTC calibration register
% t: n+ f" ^! J+ D. @2 j1 v偏移地址:0x18. s7 ]  ?9 e6 u  z0 i
上电复位值:0x0000 0000
: \, q' P/ Y7 {$ K9 ]系统复位:不受影响
; Y' i5 c1 \/ ]* E0 H8 h, H$ \
DFWO9ESWZT0Z20HH[~P][LU.png " T4 D! S- V- Y5 z" o" Y

- z' E8 _* c2 I- p& t, @0 e: F5.8 RTC 闹钟 A 寄存器 (RTC_ALRMAR)
8 O! ]8 }/ B; a" K& lRTC alarm A register, }$ r7 C" ^+ @8 O0 ?; G$ u& b8 z
偏移地址:0x1C
- ?" m3 ~. [" G( a; r# S上电复位值:0x0000 0000! }" c! N. j* t3 y
系统复位:不受影响
0 z, d  o) r) p6 W; D
5 v; }2 [# J5 a" J  c 20200908113624273.png
) C. c6 C2 T4 c3 {" _$ W# N) d0 L3 w7 G' o% O, Y- H+ g# Y# v
位 31 MSK4:闹钟 A 日期掩码 (Alarm A date mask)
5 [( g6 d/ z* I3 N0:如果日期/日匹配,则闹钟 A 置 1/ z# }; f6 b! Y; N9 G% J. G9 R6 X
1:在闹钟 A 比较中,日期/日无关
" i% ]4 {8 h- t9 d/ A
8 m5 `$ q8 Y5 k0 c$ L位 30 WDSEL:星期几选择 (Week day selection)
6 ^( Z2 u" y; M- Q9 O) W/ r0:DU[3:0] 代表日期的个位6 U5 {( ^5 h( g( B
1:DU[3:0] 代表星期几。DT[1:0] 为无关位。  X2 P$ r- D( W6 ]
- y9 U1 i4 A6 U* Y* P) h  |. `2 F: U
位 29:28 DT[1:0]:日期的十位(BCD 格式)(Date tens in BCD format)。
4 y' J) a$ z$ x5 W- j- f9 a7 {& E: X' F& L
位 27:24 DU[3:0]:日期的个位或日(BCD 格式)(Date units or day in BCD format)。7 l' |/ O. R3 h& n/ V

9 g* W8 K$ U" H/ n6 l位 23 MSK3:闹钟 A 小时掩码 (Alarm A hours mask)
* @5 D% d8 @0 P# w' t& C0:如果小时匹配,则闹钟 A 置 1
2 S- e/ ]) D% s' Y# [' K1:在闹钟 A 比较中,小时无关/ N( A- Q3 l8 ?7 g% N
* Z7 t5 x& P/ G% g( d, B+ f/ f
位 22 PM :AM/PM 符号 (AM/PM notation)
2 K- k3 n* D, M- O$ K0:AM 或 24 小时制
5 \3 p$ z5 |& g' N7 Z* X  b1:PM0 a- k" L$ }! P
( ~8 J/ b% @% a
位 21:20 HT[1:0]:小时的十位(BCD 格式)(Hour tens in BCD format)。3 g; `3 G# x6 G6 j; N, C

' L# J8 K( L6 {8 l. |* H5 X位 19:16 HU[3:0]:小时的个位(BCD 格式)(Hour units in BCD format)。
$ O' b' y5 H( P1 p) D- b8 R( E
0 A( W6 g1 ^& ^; J1 h& @  M. a位 15 MSK2:闹钟 A 分钟掩码 (Alarm A minutes mask)
* ]5 i: G( `7 g: t0 f* i4 g" d0:如果分钟匹配,则闹钟 A 置 1# }& J( z( F& Y+ s$ i/ \( h
1:在闹钟 A 比较中,分钟无关
: X) u' x) \4 ~* P  d6 ^# V% F
! Q7 Q, ]& E# f) J7 }" x7 ^位 14:12 MNT[2:0]:分钟的十位(BCD 格式)(Minute tens in BCD format)。9 u/ @% A% i6 A: K  Q
' b0 D+ e/ X2 {" A, E( M5 B
位 11:8 MNU[3:0]:分钟的个位(BCD 格式)(Minute units in BCD format)。4 |1 i0 k$ p! X) Q8 m) r

/ E6 r  B$ a' \+ W  Z位 7 MSK1:闹钟 A 秒掩码 (Alarm A seconds mask)
7 C4 ]6 ?1 m' C" Y- r0:如果秒匹配,则闹钟 A 置 1! O, q5 v  b- }7 x5 ?) d- m4 K1 O
, o  g' T3 C3 J
1:在闹钟 A 比较中,秒无关, U% R* W2 }2 r

' F& h7 R0 b/ @2 V8 q位 6:4 ST[2:0]:秒的十位(BCD 格式)(Second tens in BCD format)。: e) b, E( G+ }/ ^2 ?+ l
位 3:0 SU[3:0]:秒的个位(BCD 格式)(Second units in BCD format)。* \* c5 c" @' i8 \

! {  N- `3 z/ Q" m( q5.9 RTC 写保护寄存器 (RTC_WPR)
" Y1 D( Y0 l. [; l: ?RTC write protection register
' h& c' r" @: J* G0 m/ M' k偏移地址:0x24
- Z7 o# f  A9 b9 B* t% d复位值:0x0000 0000
. b0 ~/ V2 W, l- W0 U
! p# G8 S8 I1 L: b" L9 m! {4 g WBGCUMS6Z)BNZGN5J]YA$ZI.png
$ j9 I8 c- m& q/ r+ v" J) c- l) O  g* T
5.10 RTC 亚秒寄存器 (RTC_SSR), P+ E( T7 ?. y2 ^, L
RTC sub second register
  G+ J- o8 S3 t; J; Z, Z1 N9 D9 q偏移地址:0x28
& `3 e4 H1 m$ I4 [  p上电复位值:0x0000 0000
- W: t0 j, x# t% R- x系统复位:当 BYPSHAD = 0 时为 0x0000 0000;当 BYPSHAD = 1 时不受影响。# t6 U6 P8 k6 D6 E

1 J3 V- [# q$ n& k, O1 D- M3 c 3AV%SU]N2GOXP]G`I@I0P6R.png ' j& @- B  i7 Z6 c8 F2 Y

6 `( I( Y2 p  e5.11 RTC 时间戳时间寄存器 (RTC_TSTR)4 G6 I# ^; Z2 t3 g8 Z9 i
RTC time stamp time register
1 g% \  V1 g8 \3 `0 ]偏移地址:0x30
6 o" M1 f9 ]. J3 S2 W" @上电复位值:0x0000 0000
9 O: [# ]+ R/ z* P, j系统复位:不受影响; \# f  Q0 G8 z5 C

. _* L% y# [' g  I J_HOWC7N0LUQ~_S(5}~M(5D.png ; t9 s4 ^4 ^5 |# G

2 I$ ^9 e5 w4 f0 F" [5.12 RTC 备份寄存器 (RTC_BKPxR)
- m0 {$ g* ?1 c4 F0 w$ x3 [! q/ ~RTC backup registers
4 b& y* a# x, W" c- ]7 u6 L0 W偏移地址:0x50 到 0x9C# M- {; \4 g' P2 }- Q7 g
上电复位值:0x0000 00004 C3 w5 l9 ]" }( ?2 a
系统复位:不受影响# [3 h6 H/ }8 h2 ~+ x! o
  |' s6 p0 Q* [
]6TF[%W8V}MUMZX~{C25EZO.png
+ O' E, G& W2 J: U5 O0 m, e
& c( [- p3 F0 H4 R8 m6 q+ P( m0 G/ h6 s5 o5 w4 l. R1 N( K

' T9 M  k$ i, D. u- M5 p
赞 收藏 评论0 发布时间:2022-6-14 13:54

举报

0个回答

所属标签

相似技术帖

官网相关资源

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