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

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

[复制链接]
STMCU小助手 发布时间:2022-7-5 19:22
前言9 @! Y/ L3 ?: y
一、RTC介绍

; X2 [* U" C# Y4 A' V, ]9 X8 LSTM32 的 RTC 外设(Real Time Clock) ,实质是一个掉电后还继续运行的定时器。STM32G4 的 RTC,是一个独立的 BCD 定时器/计数器。 RTC 提供一个日历时钟(包含年月日时分秒信息)、两个可编程闹钟(ALARM A 和 ALARM B)中断,以及一个具有中断功能的周期性可编程唤醒标志。 RTC 还包含用于管理低功耗模 式的自动唤醒单元5 \" o) \( A. u7 c3 M
, h. Z" G0 y1 b; S( q& N  C1 G
从定时器的角度来说,相对于通用定时器 TIM 外设,它十分简单,只有很纯粹的计时和触发中断的功能;但从掉电还继续运行的角度来说,它却是 STM32 中唯一一个具有如此强大功能的外设。所以 RTC 外设的复杂之处并不在于它的定时功能,而在于它掉电还继续运行的特性" F8 `' F& {  G, v9 S
) o" Q5 ]3 H7 [& h
以上所说的掉电,是指主电源 VDD 断开的情况,为了 RTC 外设掉电继续运行,必须接上锂电池给 STM32 的 RTC、备份发卡通过 VBAT 引脚供电7 {% N* Z7 r) ^, \9 N% w
1 I7 r: j9 y/ U4 |0 K$ x
当主电源 VDD 有效时,由VDD给 RTC 外设供电; 而当 VDD掉电后,由 VBAT给 RTC 外设供电。但无论由什么电源供电,== RTC 中的数据都保存在属于 RTC 的备份域中,若主电源 VDD和 VBAT都掉电,那么备份域中保存的所有数据将丢失==。
; G/ g- r; l& R" v# B' `
" U2 C7 n$ `" [* S* E2 P9 l; J" t备份域除了 RTC 模块的寄存器,还有 42 个 16 位的寄存器可以在 VDD 掉电的情况下保存用户程序的数据,系统复位或电源复位时,这些数据也不会被复位
! d; _# S  j2 Y7 S# s/ _
: M3 C; \2 |: w7 L# E2 x5 s8 z 84O7Q$_]9L36C$TG_9)GB1A.png 2 i+ m  m7 U! v: O9 z; w% K- y$ Y( q

3 Y, E! U, f! z, z& Y2 A1 t从 RTC 的定时器特性来说,它是一个 32 位的计数器,只能向上计数。它使用的时钟源有三种,分别为高速外部时钟的, 低速内部时钟 LSI 以及低速外部时钟 LSE6 Q3 t/ v6 g  y+ ]
3 [5 X6 x* h; i% D  z+ W4 \
这里使用的高速外部时钟HSE32分频得到750khz,在主电源 VDD有效的情况下(待机), RTC 还可以配置闹钟事件使 STM32 退出待机模式
0 c, k) M5 G4 ?8 |+ e- h9 \9 B& u/ t
由于 RTC_CNT 是 32 位寄存器,可存储的最大值为(232-1),即这样计时的话,在 232秒后溢出,即它将在今后的 136 年时溢出:! B& C4 L6 K$ ^  [" M! q# W
N = 232/365/24/60/60 ≈136 年7 s6 i/ T! c0 e5 ~: F

! `% \; Z8 O. M9 s 11{3{NIVYHNDG_3R2NO3D8W.png
' b. U" O8 p  J9 G5 `$ I( o
) S3 S1 R/ u! G! l8 a% x% a5 z时钟分频来自HSE32分频得到750khz,然后经过7位异步分频(125)和15位同步分频(6000),得到ck_spre(一般要使这个值为1hz), ck_spre 即可用于更新日历时间等信息$ ]8 E) }- a2 t* J2 L5 Z

( A" J- F) j: u7 @! X日历时间(RTC_TR)和日期(RTC_DR)寄存器两个 32 位寄存器包含二进码/B十进数格式 (BCD) 的秒、分钟、小时(12 或24 小时制)、星期、日期、月份和年份。此外,还可提供二进制格式的亚秒值3 p3 ^9 D% l) W5 H6 H

9 k8 n3 O$ `' h" V0 s可以读取 RTC_TR 和 RTC_DR 来得到当前时间和日期信息,不过需要注意的是:时间和日期都是以 BCD 码的格式存储的,读出来要转换一下,才可以得到十进制的数据,在读的时侯,以二进制格式读出来的数据可以直接使用。
. p) y& k! r6 H% L: O
5 e) V3 E% ~* G5 X5 lSTM32G4 提供两个可编程闹钟:闹钟 A(ALARM_A)和闹钟 B(ALARM_B)。通过 RTC_CR寄存器的 ALRAE 和 ALRBE 位置 1 来使能可编程闹钟功能。当日历的亚秒、秒、分、小时、日期分别与闹钟寄存器 RTC_ALRMASSR/RTC_ALRMAR 和 RTC_ALRMBSSR/RTC_ALRMBR中的值匹配时,则可以产生闹钟(需要适当配置)% O/ I% Q1 [) d& b) W

; a* F; O% L# I$ [  C' S  S; ?% a小结:
# H: U! S, Q3 `! R. FRTC配置一般步骤:
; V5 n  h0 n# j& w4 ^, ]' G① 使能PWR和BKP时钟  B. N( H* B+ O
② 使能后备寄存器访问; Z" j5 N9 M' }. s) Z
③ 配置RTC时钟源,使能RTC时钟:
% x& G7 z) E+ j8 J! ]1 C4 Y# S. R3 }如果使用LSE,要打开LSE:RCC_LSEConfig(RCC_LSE_ON);
, o0 \( Q: |0 j- |④ 设置RTC预分频系数
3 [- q) E9 ~& G3 K- b⑤ 设置时间1 H# @8 M* n  ?
⑥开启相关中断(如果需要)
8 O8 t$ f! ], s; ]9 k2 d⑦编写中断服务函数/ a3 t1 y$ Y9 y6 m9 j8 |# V
⑧部分操作要等待写操作完成和同步。
( M; o$ c+ k7 j! L" b5 U+ q1 M$ r/ a' o
二、STM32CubeMX配置
0 n2 A% X9 a4 ], Z: }(1)RTC使能时钟源和日历+ R: ]  r: b7 r( j8 ?: v. z
HLMFZ{RU_{6LFODJ(S]GII6.png % e/ v; ]& w( D8 H
  R3 Q7 Z8 N0 @6 N% C" Y. E
(2)配置时钟来源,选择外部时钟HSE,经32分频,得到750Khz
5 K" ~  b* J8 ?$ c1 U( K& O* z& @3 x  d" k* i- k
}W$@AD`%]U7]YVA0XFVC4PQ.png
$ H* x- G9 {: V* i! L3 [8 }( h. m  u4 i1 E2 F+ ^" l
(3)设置分频和时间
. }* @' T/ |3 D) I& [& [8 i) X; N
1 O! B) k/ @* B( T7 D" t8 c P86[BPN2G3KUP[NISHUU}WN.png
+ Q4 M& x4 K. d; l: ?9 R1 V7 K& j/ E& Y: `# g  H' V
注意,一定要选择好两次分频的系数,使经过两次分频后的时钟频率为1hz
+ c- x  W3 {. B9 q; L& L- Y9 o* U
750 000 / 125 / 6000 = 1
4 O$ q4 H& ~& E7 W1 s. W' b
1 ~- a9 \3 t& ]: ~6 U4 O" P三、部分源码

* ~2 J8 k) o8 P4 C; p9 E
  1. RTC_TimeTypeDef  H_S_M_Time; // 时间结构体
    & d/ \0 _. A( w; e5 {+ A' d% \
  2. RTC_DateTypeDef  Y_M_D_Data; // 日期结构体5 H7 [  j2 t9 t% |. f

  3. % s8 t$ M# ^- Q/ o- e/ z1 w
  4. // 获取日期和时间必须同时使用,注意这里的编码方式选择二进制,可以直接使用0 S1 @, N# x$ n: l& o% H8 D
  5.         // 若选择BCD编码,需要自己处理数据
    1 u4 _: x- j, I
  6.         HAL_RTC_GetTime(&hrtc, &H_S_M_Time,RTC_FORMAT_BIN);
    # o6 E9 G; p; d% z4 c9 t# b
  7.         HAL_RTC_GetDate(&hrtc, &Y_M_D_Data,RTC_FORMAT_BIN);
    7 q- y$ d& C# d8 N. @: m- K0 d
  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);* ]8 }7 A4 Z1 a( L! s3 _
  9.         LCD_DisplayStringLine(Line0, Lcd_Display_String);
复制代码

$ e: z- s: {8 w0 P3 N
; B' q3 H& w3 {8 M# K& X  H8 V0 {# W& F! i. T4 v0 _! ^

5 ]' q) Y! v5 {* W2 H
赞 收藏 评论0 发布时间:2022-7-5 19:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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