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

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

[复制链接]
STMCU小助手 发布时间:2022-7-5 19:22
前言" @$ Q/ [$ J7 A/ H
一、RTC介绍
3 A4 J( ~4 Y% h9 s3 D
STM32 的 RTC 外设(Real Time Clock) ,实质是一个掉电后还继续运行的定时器。STM32G4 的 RTC,是一个独立的 BCD 定时器/计数器。 RTC 提供一个日历时钟(包含年月日时分秒信息)、两个可编程闹钟(ALARM A 和 ALARM B)中断,以及一个具有中断功能的周期性可编程唤醒标志。 RTC 还包含用于管理低功耗模 式的自动唤醒单元! j/ B/ L- U3 A3 i2 ^
& Z8 P# z6 q) ?7 D. o/ [& D
从定时器的角度来说,相对于通用定时器 TIM 外设,它十分简单,只有很纯粹的计时和触发中断的功能;但从掉电还继续运行的角度来说,它却是 STM32 中唯一一个具有如此强大功能的外设。所以 RTC 外设的复杂之处并不在于它的定时功能,而在于它掉电还继续运行的特性0 L3 P' n: _' @
7 J$ G* R8 g$ p) k1 i
以上所说的掉电,是指主电源 VDD 断开的情况,为了 RTC 外设掉电继续运行,必须接上锂电池给 STM32 的 RTC、备份发卡通过 VBAT 引脚供电+ Y& m# g# ]  u  |5 g/ k
7 ^, J" o# |1 X& ~' A$ \" N' F
当主电源 VDD 有效时,由VDD给 RTC 外设供电; 而当 VDD掉电后,由 VBAT给 RTC 外设供电。但无论由什么电源供电,== RTC 中的数据都保存在属于 RTC 的备份域中,若主电源 VDD和 VBAT都掉电,那么备份域中保存的所有数据将丢失==。: E0 B5 P+ T( ?. {7 P4 I
1 _7 [' I/ \0 \* U3 o
备份域除了 RTC 模块的寄存器,还有 42 个 16 位的寄存器可以在 VDD 掉电的情况下保存用户程序的数据,系统复位或电源复位时,这些数据也不会被复位
2 F5 W! `4 G$ Y4 S" h3 r2 u3 m# O
84O7Q$_]9L36C$TG_9)GB1A.png
. B+ }# S% i) I( s$ W2 M
7 e+ J3 J# W" [1 N4 E3 H从 RTC 的定时器特性来说,它是一个 32 位的计数器,只能向上计数。它使用的时钟源有三种,分别为高速外部时钟的, 低速内部时钟 LSI 以及低速外部时钟 LSE( y: L. o- j% {1 ?2 v! }  K$ c, p
) G$ ^! Y/ h- {* t. I+ u1 p
这里使用的高速外部时钟HSE32分频得到750khz,在主电源 VDD有效的情况下(待机), RTC 还可以配置闹钟事件使 STM32 退出待机模式
1 r- ^8 k" P( G. g: Y$ J
. \, p5 M3 Q% ~. x7 p. ^7 w) e) ?由于 RTC_CNT 是 32 位寄存器,可存储的最大值为(232-1),即这样计时的话,在 232秒后溢出,即它将在今后的 136 年时溢出:& \$ [( K8 f. d7 c# ~" o' v
N = 232/365/24/60/60 ≈136 年
) A0 e8 w6 B7 N7 A/ y9 @- r5 _, r) O$ _) [' n5 D
11{3{NIVYHNDG_3R2NO3D8W.png 5 U1 S- ^) g1 [, X7 m
  V) s# z8 i9 J" H) G
时钟分频来自HSE32分频得到750khz,然后经过7位异步分频(125)和15位同步分频(6000),得到ck_spre(一般要使这个值为1hz), ck_spre 即可用于更新日历时间等信息4 o4 r" @. j3 ?# B1 x7 G% [/ E$ q, d
' O) W0 M8 s: |. b% J
日历时间(RTC_TR)和日期(RTC_DR)寄存器两个 32 位寄存器包含二进码/B十进数格式 (BCD) 的秒、分钟、小时(12 或24 小时制)、星期、日期、月份和年份。此外,还可提供二进制格式的亚秒值% l3 V2 R& ]' U; p4 U
% ~7 N! J$ R/ k4 S6 y9 k5 r$ A+ t
可以读取 RTC_TR 和 RTC_DR 来得到当前时间和日期信息,不过需要注意的是:时间和日期都是以 BCD 码的格式存储的,读出来要转换一下,才可以得到十进制的数据,在读的时侯,以二进制格式读出来的数据可以直接使用。
0 \9 w3 \* c5 D& ]4 K: j
4 j2 M; c# V; a+ h! ~0 S, T1 pSTM32G4 提供两个可编程闹钟:闹钟 A(ALARM_A)和闹钟 B(ALARM_B)。通过 RTC_CR寄存器的 ALRAE 和 ALRBE 位置 1 来使能可编程闹钟功能。当日历的亚秒、秒、分、小时、日期分别与闹钟寄存器 RTC_ALRMASSR/RTC_ALRMAR 和 RTC_ALRMBSSR/RTC_ALRMBR中的值匹配时,则可以产生闹钟(需要适当配置)
. Z  h6 @/ G! {( v; ?
8 ^/ P' D  P- B5 \% f小结:- K3 Q: ~" B6 S& Y4 M
RTC配置一般步骤:
) C( {9 w! o: t/ K' ]4 h① 使能PWR和BKP时钟& T( ]& F% x+ V6 o8 j4 Y. t
② 使能后备寄存器访问
. X+ p: H6 \. t$ I0 l0 H$ z③ 配置RTC时钟源,使能RTC时钟:; E% e5 a0 ~5 R' h2 \
如果使用LSE,要打开LSE:RCC_LSEConfig(RCC_LSE_ON);
. h( Z) @% u6 ]& a& h④ 设置RTC预分频系数
3 F6 I9 E; M- l8 a8 E7 R⑤ 设置时间5 |$ N- |; k4 |# n' J" W5 k
⑥开启相关中断(如果需要)" D  z: b$ L$ K3 A8 G1 b4 u
⑦编写中断服务函数
" t! `& S8 I  g' ~' ~1 I  d⑧部分操作要等待写操作完成和同步。
2 W8 y( Q* `& D: a! Q4 w: [
2 z! t1 t4 C. C二、STM32CubeMX配置, X# x, O5 e1 b& ~* X
(1)RTC使能时钟源和日历
* N3 u  x8 f6 o HLMFZ{RU_{6LFODJ(S]GII6.png 8 g" e) V; r3 {6 m0 F# z2 c4 ?

/ p* }$ [% ~7 x# P(2)配置时钟来源,选择外部时钟HSE,经32分频,得到750Khz; W$ J6 f. p) y

; G: i+ H; N# i6 `0 y& O }W$@AD`%]U7]YVA0XFVC4PQ.png % F0 U+ I' W! ~5 `+ Y
3 s; b, h+ p+ G  \3 `' f- T- X
(3)设置分频和时间
: ?+ y# n0 w2 y
8 ~" N- _$ u& S+ y! `1 H P86[BPN2G3KUP[NISHUU}WN.png
$ x) Z( @5 R+ L' E9 K0 p( k+ L; Y, R  }  X9 m3 ^$ e9 o
注意,一定要选择好两次分频的系数,使经过两次分频后的时钟频率为1hz& G% M/ j! W1 q7 ~" Z! }% g$ c

, b# ]; V  `  U# e; l750 000 / 125 / 6000 = 1
  f; ~8 f! K& `
0 M% e% N' O0 x三、部分源码
6 m2 D2 g# M4 W1 T4 |
  1. RTC_TimeTypeDef  H_S_M_Time; // 时间结构体
    . ?- n6 h( ?$ i7 h* P. A
  2. RTC_DateTypeDef  Y_M_D_Data; // 日期结构体
    $ m0 F3 G. `5 W! C
  3. " D: I9 V! Z5 r
  4. // 获取日期和时间必须同时使用,注意这里的编码方式选择二进制,可以直接使用
    ; J/ D4 k- Q  i; m: n, t
  5.         // 若选择BCD编码,需要自己处理数据- e8 ]2 c! A4 r9 U
  6.         HAL_RTC_GetTime(&hrtc, &H_S_M_Time,RTC_FORMAT_BIN);
    ) C) ^# v/ c1 b5 }
  7.         HAL_RTC_GetDate(&hrtc, &Y_M_D_Data,RTC_FORMAT_BIN);
    # j4 T% x5 n8 f' q
  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);* Y% f# m3 z0 ]: h- _# K
  9.         LCD_DisplayStringLine(Line0, Lcd_Display_String);
复制代码

8 F  j: p3 \' y6 A+ e1 v5 Z9 f5 Q/ p
7 a! ]8 H8 M% l# T
- k; k) K; e  u+ Q! F
收藏 评论0 发布时间:2022-7-5 19:22

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版