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

【经验分享】STM32G4之RTC实时时钟

[复制链接]
STMCU小助手 发布时间:2022-7-5 19:22
前言
! P! _: p6 X' o7 p一、RTC介绍

$ t: J4 d' x, F  V! YSTM32 的 RTC 外设(Real Time Clock) ,实质是一个掉电后还继续运行的定时器。STM32G4 的 RTC,是一个独立的 BCD 定时器/计数器。 RTC 提供一个日历时钟(包含年月日时分秒信息)、两个可编程闹钟(ALARM A 和 ALARM B)中断,以及一个具有中断功能的周期性可编程唤醒标志。 RTC 还包含用于管理低功耗模 式的自动唤醒单元
, ^7 Y$ Y4 R) z3 _- Y$ |5 C" v7 [) t  p# ~% p1 Q& y$ X4 a
从定时器的角度来说,相对于通用定时器 TIM 外设,它十分简单,只有很纯粹的计时和触发中断的功能;但从掉电还继续运行的角度来说,它却是 STM32 中唯一一个具有如此强大功能的外设。所以 RTC 外设的复杂之处并不在于它的定时功能,而在于它掉电还继续运行的特性% h8 T% b& X+ R0 Y# B7 \
9 W1 O$ }/ f0 {3 }
以上所说的掉电,是指主电源 VDD 断开的情况,为了 RTC 外设掉电继续运行,必须接上锂电池给 STM32 的 RTC、备份发卡通过 VBAT 引脚供电
$ o! n6 D2 L6 B1 M$ J2 ?# h3 r' y/ T& ]+ ~
当主电源 VDD 有效时,由VDD给 RTC 外设供电; 而当 VDD掉电后,由 VBAT给 RTC 外设供电。但无论由什么电源供电,== RTC 中的数据都保存在属于 RTC 的备份域中,若主电源 VDD和 VBAT都掉电,那么备份域中保存的所有数据将丢失==。
4 v. n/ w7 P; f) H2 z- L$ `
0 ^6 A$ x# Y) p$ _  x9 \备份域除了 RTC 模块的寄存器,还有 42 个 16 位的寄存器可以在 VDD 掉电的情况下保存用户程序的数据,系统复位或电源复位时,这些数据也不会被复位
5 O: H5 c6 F/ {7 x6 i; m/ e
, Y7 H' i' C' m1 A8 C; n+ d6 Z# Q 84O7Q$_]9L36C$TG_9)GB1A.png
0 x1 P0 V" O; k! p  [, P# T& v  l/ f. z/ S
从 RTC 的定时器特性来说,它是一个 32 位的计数器,只能向上计数。它使用的时钟源有三种,分别为高速外部时钟的, 低速内部时钟 LSI 以及低速外部时钟 LSE
$ W% ]: Y8 A& D- A, M
+ X# K7 y- J( N+ c0 i" r) F这里使用的高速外部时钟HSE32分频得到750khz,在主电源 VDD有效的情况下(待机), RTC 还可以配置闹钟事件使 STM32 退出待机模式5 i. S% |# H- l) i) A7 m

8 Y2 E% X1 }: D; T+ x3 s由于 RTC_CNT 是 32 位寄存器,可存储的最大值为(232-1),即这样计时的话,在 232秒后溢出,即它将在今后的 136 年时溢出:- r% q' O" N, O6 y3 d* T: j
N = 232/365/24/60/60 ≈136 年& d2 C  `* E  ~" n
1 k) z' n' E0 U( g
11{3{NIVYHNDG_3R2NO3D8W.png 6 _/ I) O* m! u9 h; m8 P7 X* M& U

6 G0 {) Z" h& t' d" ?, n0 z  b时钟分频来自HSE32分频得到750khz,然后经过7位异步分频(125)和15位同步分频(6000),得到ck_spre(一般要使这个值为1hz), ck_spre 即可用于更新日历时间等信息
8 Q' C! D) u  |) E# m5 N) C/ j  `' t; I. A
日历时间(RTC_TR)和日期(RTC_DR)寄存器两个 32 位寄存器包含二进码/B十进数格式 (BCD) 的秒、分钟、小时(12 或24 小时制)、星期、日期、月份和年份。此外,还可提供二进制格式的亚秒值
/ r- C  h6 T- V. r& a( ~$ J/ q: ~  X# {* v5 Q. [. v+ }' W# v$ c, ?$ o
可以读取 RTC_TR 和 RTC_DR 来得到当前时间和日期信息,不过需要注意的是:时间和日期都是以 BCD 码的格式存储的,读出来要转换一下,才可以得到十进制的数据,在读的时侯,以二进制格式读出来的数据可以直接使用。& R, M) p2 c# z; g  E4 ]% p

2 n# \- Y+ U7 P5 }STM32G4 提供两个可编程闹钟:闹钟 A(ALARM_A)和闹钟 B(ALARM_B)。通过 RTC_CR寄存器的 ALRAE 和 ALRBE 位置 1 来使能可编程闹钟功能。当日历的亚秒、秒、分、小时、日期分别与闹钟寄存器 RTC_ALRMASSR/RTC_ALRMAR 和 RTC_ALRMBSSR/RTC_ALRMBR中的值匹配时,则可以产生闹钟(需要适当配置)
7 [. S5 @1 b4 t# \0 u& ]
9 [* i4 M; e3 s3 h. V7 ?/ [- O小结:3 r* p% X! w' i2 Q3 ]- u% b
RTC配置一般步骤:
+ }! }1 y2 W7 r' F9 a① 使能PWR和BKP时钟- D8 M2 ?, V, A# g* W7 a6 m1 p
② 使能后备寄存器访问
' z2 `7 u1 @$ k9 [, c( x  A9 n③ 配置RTC时钟源,使能RTC时钟:
4 l8 c8 K1 a" v. u7 X如果使用LSE,要打开LSE:RCC_LSEConfig(RCC_LSE_ON);5 Q- [6 m2 j$ K; M
④ 设置RTC预分频系数5 f9 [# `3 V( l4 P
⑤ 设置时间+ C9 }8 v6 X* m: A
⑥开启相关中断(如果需要)
  V9 t; j6 Q$ G) ?⑦编写中断服务函数! w6 F" C  ]9 x2 ?. j5 c. N
⑧部分操作要等待写操作完成和同步。
4 o$ U' `  F# A/ b0 V. w6 [" A2 `+ U, r5 K
二、STM32CubeMX配置: \9 J' I9 K  B  A2 |+ m  C
(1)RTC使能时钟源和日历
$ D+ `! t4 i$ }* m HLMFZ{RU_{6LFODJ(S]GII6.png
/ z9 `3 }6 N8 O& I; m( h4 a: L! g0 x
(2)配置时钟来源,选择外部时钟HSE,经32分频,得到750Khz
) t1 P: q/ Y, i$ C& Y8 A$ G& O) t5 T6 V) _% s4 {5 Q6 D
}W$@AD`%]U7]YVA0XFVC4PQ.png
/ X- G  R$ [9 o  @9 `& a1 p5 ~9 ~& M$ y& G  R: W% C
(3)设置分频和时间
5 B. G, K" O* o- r3 k8 a0 n2 z% k7 l( ^  F8 Y7 k" O% S
P86[BPN2G3KUP[NISHUU}WN.png ' I2 v/ d! K! \/ c+ ]9 {

% L4 ]- g2 P$ o1 Z! ^; u注意,一定要选择好两次分频的系数,使经过两次分频后的时钟频率为1hz% D! ]" Q8 ]9 |% ^

# `5 R, v9 h" i+ q9 J( d/ t" b750 000 / 125 / 6000 = 1
3 |; n% F) P! T# a
* s; U! }* p9 c! q' \9 ?' g三、部分源码

9 n% Z; }2 y: I1 ]' O
  1. RTC_TimeTypeDef  H_S_M_Time; // 时间结构体
    5 k) I) Q$ `- I' t' ~
  2. RTC_DateTypeDef  Y_M_D_Data; // 日期结构体  o6 H( m/ O3 b7 ]

  3. + g. y& C+ U2 p8 L$ x# P
  4. // 获取日期和时间必须同时使用,注意这里的编码方式选择二进制,可以直接使用
    $ L! i' d3 ], [* z/ i) I
  5.         // 若选择BCD编码,需要自己处理数据
    & N/ M5 f1 K% j; Y% C4 R+ R& \
  6.         HAL_RTC_GetTime(&hrtc, &H_S_M_Time,RTC_FORMAT_BIN);1 J# ?8 s( u6 u: F; S: ?
  7.         HAL_RTC_GetDate(&hrtc, &Y_M_D_Data,RTC_FORMAT_BIN);
    ; |) _6 ?! m3 ~, H2 j
  8.         sprintf((char *)Lcd_Display_String,"TIME:%2d-%2d-%2d",H_S_M_Time.Hours,H_S_M_Time.Minutes,H_S_M_Time.Seconds);
    ' m1 J) G' N, u' h  {' ~( Y
  9.         LCD_DisplayStringLine(Line0, Lcd_Display_String);
复制代码

: E0 a* a' m, P( s; o# c! _; D' N1 A+ N# }+ W& }$ ~( J
2 k- ^6 G+ p' t8 R  V- Z4 z

7 B6 ]- s4 A5 X- Q, r4 E/ j
收藏 评论0 发布时间:2022-7-5 19:22

举报

0个回答

所属标签

相似分享

官网相关资源

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