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

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

[复制链接]
STMCU小助手 发布时间:2022-7-5 19:22
前言
( K, N! `' U( D; u/ o& m& a# T一、RTC介绍

0 `- m8 j* l% Z! N* y" ISTM32 的 RTC 外设(Real Time Clock) ,实质是一个掉电后还继续运行的定时器。STM32G4 的 RTC,是一个独立的 BCD 定时器/计数器。 RTC 提供一个日历时钟(包含年月日时分秒信息)、两个可编程闹钟(ALARM A 和 ALARM B)中断,以及一个具有中断功能的周期性可编程唤醒标志。 RTC 还包含用于管理低功耗模 式的自动唤醒单元, _1 a) ]# w" p# g+ F
5 a5 Y: j- x1 @
从定时器的角度来说,相对于通用定时器 TIM 外设,它十分简单,只有很纯粹的计时和触发中断的功能;但从掉电还继续运行的角度来说,它却是 STM32 中唯一一个具有如此强大功能的外设。所以 RTC 外设的复杂之处并不在于它的定时功能,而在于它掉电还继续运行的特性
4 t+ ?; [! A8 }7 \" R. [, A+ [& O2 q0 B% H' ]1 ^
以上所说的掉电,是指主电源 VDD 断开的情况,为了 RTC 外设掉电继续运行,必须接上锂电池给 STM32 的 RTC、备份发卡通过 VBAT 引脚供电: U+ n. w  @7 ^' e  ]$ p! ]  \
- }* ~  [5 g* P
当主电源 VDD 有效时,由VDD给 RTC 外设供电; 而当 VDD掉电后,由 VBAT给 RTC 外设供电。但无论由什么电源供电,== RTC 中的数据都保存在属于 RTC 的备份域中,若主电源 VDD和 VBAT都掉电,那么备份域中保存的所有数据将丢失==。
, \& j# }/ y7 c. e
7 L3 S+ A; i; i9 H7 h( j( m备份域除了 RTC 模块的寄存器,还有 42 个 16 位的寄存器可以在 VDD 掉电的情况下保存用户程序的数据,系统复位或电源复位时,这些数据也不会被复位
- \5 C( d+ ~. w4 u# k9 u, g; E1 H  l4 {- e+ v
84O7Q$_]9L36C$TG_9)GB1A.png
" b9 s( t6 e7 j$ q& w$ p
, j8 X7 R3 r. o9 M从 RTC 的定时器特性来说,它是一个 32 位的计数器,只能向上计数。它使用的时钟源有三种,分别为高速外部时钟的, 低速内部时钟 LSI 以及低速外部时钟 LSE* f- A4 S$ i& {% w

( @0 g  `: `1 M6 S( Y5 [这里使用的高速外部时钟HSE32分频得到750khz,在主电源 VDD有效的情况下(待机), RTC 还可以配置闹钟事件使 STM32 退出待机模式
( S- l; A& L9 |- L
- t' Y) u: j6 ^/ A$ b6 t由于 RTC_CNT 是 32 位寄存器,可存储的最大值为(232-1),即这样计时的话,在 232秒后溢出,即它将在今后的 136 年时溢出:
( T3 E5 r! e) p9 VN = 232/365/24/60/60 ≈136 年3 }6 Q* _  d' x6 V( M% {$ y2 g
" w6 ?2 a& A" q4 D
11{3{NIVYHNDG_3R2NO3D8W.png
' h% D0 Y4 ^: C: W1 A
8 m8 g  |9 j! y1 Q$ y: E  Z- _. j时钟分频来自HSE32分频得到750khz,然后经过7位异步分频(125)和15位同步分频(6000),得到ck_spre(一般要使这个值为1hz), ck_spre 即可用于更新日历时间等信息
5 ?* ^% F( A# ?* m# \: S4 q' U
2 M' X' j1 J, g# ]  N% i4 U日历时间(RTC_TR)和日期(RTC_DR)寄存器两个 32 位寄存器包含二进码/B十进数格式 (BCD) 的秒、分钟、小时(12 或24 小时制)、星期、日期、月份和年份。此外,还可提供二进制格式的亚秒值
7 p4 Y8 C* P" g9 \, ], u
2 b! P. K+ ]% K3 x! N  H" F可以读取 RTC_TR 和 RTC_DR 来得到当前时间和日期信息,不过需要注意的是:时间和日期都是以 BCD 码的格式存储的,读出来要转换一下,才可以得到十进制的数据,在读的时侯,以二进制格式读出来的数据可以直接使用。8 _; ]: R" }5 ^9 K
3 f: \9 [* F# C
STM32G4 提供两个可编程闹钟:闹钟 A(ALARM_A)和闹钟 B(ALARM_B)。通过 RTC_CR寄存器的 ALRAE 和 ALRBE 位置 1 来使能可编程闹钟功能。当日历的亚秒、秒、分、小时、日期分别与闹钟寄存器 RTC_ALRMASSR/RTC_ALRMAR 和 RTC_ALRMBSSR/RTC_ALRMBR中的值匹配时,则可以产生闹钟(需要适当配置)3 |" r/ t. a: O

; x" W7 u0 `2 M! Q3 ~小结:0 ]# [) W! l( ]2 I
RTC配置一般步骤:
7 j5 H: p5 Q7 s: u7 I; A① 使能PWR和BKP时钟6 i2 W  n" p6 d0 o: [
② 使能后备寄存器访问( P6 u$ A" U1 `$ d1 }9 Q2 ~
③ 配置RTC时钟源,使能RTC时钟:: K1 C' s! L4 ]8 \( k4 F8 R7 f
如果使用LSE,要打开LSE:RCC_LSEConfig(RCC_LSE_ON);- h! `  Y" a, G: K( m6 c7 Q
④ 设置RTC预分频系数
* j9 O+ S3 u( p⑤ 设置时间7 O* Y7 I$ \" Z" j
⑥开启相关中断(如果需要)4 ?$ {. Z7 X+ T. T% ]1 y; a* n
⑦编写中断服务函数$ |2 o1 h( t9 Y2 P) R& R& u
⑧部分操作要等待写操作完成和同步。
. x$ d# Y" w; K) h, M  ?4 ?3 T0 R
二、STM32CubeMX配置+ V% Y0 I$ f# }: Q% E. a; X
(1)RTC使能时钟源和日历4 ]& N- W* ]% R
HLMFZ{RU_{6LFODJ(S]GII6.png 6 k, Y* A0 @3 o2 v; L/ j0 R+ w
: [$ b4 ?% g* s# O3 _) W
(2)配置时钟来源,选择外部时钟HSE,经32分频,得到750Khz
! e  ^5 X7 N# ?& ~5 X1 C, F# X" ~8 G) c" W/ O) w+ W
}W$@AD`%]U7]YVA0XFVC4PQ.png
( m- A6 V/ J' J" e: {/ n6 G
! T4 ~  r. ^. x/ C# O7 O(3)设置分频和时间
6 @0 @* ]5 k3 m" q: @
" V9 A! ?$ w$ Z, y P86[BPN2G3KUP[NISHUU}WN.png + ]+ w* V% k3 \" ]2 R$ W* K

" t* Q/ n5 i: k$ v9 Y$ ]3 E6 E注意,一定要选择好两次分频的系数,使经过两次分频后的时钟频率为1hz
6 e( x( [0 T: M3 |% |% T
1 U$ ]* c3 |6 |# V8 V5 B" v2 v750 000 / 125 / 6000 = 1
3 M( }2 E# {2 K: d$ v) U7 b) c" e" u+ a/ M8 h: Z
三、部分源码

4 _5 B$ t% K) x: r' G- P( F
  1. RTC_TimeTypeDef  H_S_M_Time; // 时间结构体
    * I, E2 B, t9 Y; Z- y/ w7 @
  2. RTC_DateTypeDef  Y_M_D_Data; // 日期结构体- v8 i, ]8 k, O) n* D% p3 i9 t

  3. : ^9 F( R8 q8 U
  4. // 获取日期和时间必须同时使用,注意这里的编码方式选择二进制,可以直接使用! Q; h( h  Z/ r+ w, |
  5.         // 若选择BCD编码,需要自己处理数据
    0 h: j  v: g' E# L' Q
  6.         HAL_RTC_GetTime(&hrtc, &H_S_M_Time,RTC_FORMAT_BIN);
    9 P& e6 S* K, N0 H. ?* R% S
  7.         HAL_RTC_GetDate(&hrtc, &Y_M_D_Data,RTC_FORMAT_BIN);$ J7 s6 p3 e4 r9 w
  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);
    ! S" U+ M% |3 K& Q
  9.         LCD_DisplayStringLine(Line0, Lcd_Display_String);
复制代码
# Q+ x5 _4 B! N
1 \  C9 \, R/ h+ R
0 G, Y' C" A9 Q7 d
; J# n/ A9 B" k6 z8 m; |3 O
赞 收藏 评论0 发布时间:2022-7-5 19:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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