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

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

[复制链接]
STMCU小助手 发布时间:2022-7-5 19:22
前言, j( x# p; e& B0 z- E& a5 S
一、RTC介绍

8 e& i: I. |$ H. _6 lSTM32 的 RTC 外设(Real Time Clock) ,实质是一个掉电后还继续运行的定时器。STM32G4 的 RTC,是一个独立的 BCD 定时器/计数器。 RTC 提供一个日历时钟(包含年月日时分秒信息)、两个可编程闹钟(ALARM A 和 ALARM B)中断,以及一个具有中断功能的周期性可编程唤醒标志。 RTC 还包含用于管理低功耗模 式的自动唤醒单元
6 |6 U9 D" O% d: M5 H8 G8 F% w: T) Q* ~6 V4 t2 ]  V$ G4 }
从定时器的角度来说,相对于通用定时器 TIM 外设,它十分简单,只有很纯粹的计时和触发中断的功能;但从掉电还继续运行的角度来说,它却是 STM32 中唯一一个具有如此强大功能的外设。所以 RTC 外设的复杂之处并不在于它的定时功能,而在于它掉电还继续运行的特性
( l9 v+ F. N4 X# A% I3 y* z& r! F& N: ]
以上所说的掉电,是指主电源 VDD 断开的情况,为了 RTC 外设掉电继续运行,必须接上锂电池给 STM32 的 RTC、备份发卡通过 VBAT 引脚供电
+ S. i+ f' Y0 T% Z' L$ t6 H
% e2 y# a7 H/ i; U5 f( \- m当主电源 VDD 有效时,由VDD给 RTC 外设供电; 而当 VDD掉电后,由 VBAT给 RTC 外设供电。但无论由什么电源供电,== RTC 中的数据都保存在属于 RTC 的备份域中,若主电源 VDD和 VBAT都掉电,那么备份域中保存的所有数据将丢失==。
# I# E5 K- }& ~8 f9 |+ r
( l5 P# Z% I2 w# ^2 z6 G备份域除了 RTC 模块的寄存器,还有 42 个 16 位的寄存器可以在 VDD 掉电的情况下保存用户程序的数据,系统复位或电源复位时,这些数据也不会被复位# f( W3 K+ w) g

( j2 s: ~% b1 [: @ 84O7Q$_]9L36C$TG_9)GB1A.png
6 t! A& W6 p1 f  _6 C0 J7 L
% r: m' _3 L" ?1 I9 e从 RTC 的定时器特性来说,它是一个 32 位的计数器,只能向上计数。它使用的时钟源有三种,分别为高速外部时钟的, 低速内部时钟 LSI 以及低速外部时钟 LSE
* G' O& r  }; ^* @% t( f( j
& m: w1 d6 h7 z( V# ^5 _这里使用的高速外部时钟HSE32分频得到750khz,在主电源 VDD有效的情况下(待机), RTC 还可以配置闹钟事件使 STM32 退出待机模式
8 L: O& l  A, y) R$ n; [
; z6 ]4 W" K$ ]4 x: j" o: W$ u8 d* W: D由于 RTC_CNT 是 32 位寄存器,可存储的最大值为(232-1),即这样计时的话,在 232秒后溢出,即它将在今后的 136 年时溢出:7 l! J2 \& |( |4 k: m
N = 232/365/24/60/60 ≈136 年
8 k! `! Q9 ]9 H( r. h$ i# s  u7 U
11{3{NIVYHNDG_3R2NO3D8W.png
, e$ Q% J7 t# ?" X) w7 i* j
0 H- N. g* W  |9 _9 m6 ~时钟分频来自HSE32分频得到750khz,然后经过7位异步分频(125)和15位同步分频(6000),得到ck_spre(一般要使这个值为1hz), ck_spre 即可用于更新日历时间等信息
9 A: j: S2 x/ j* S3 M" o" f# u: Y( I: k# D& x/ n8 H
日历时间(RTC_TR)和日期(RTC_DR)寄存器两个 32 位寄存器包含二进码/B十进数格式 (BCD) 的秒、分钟、小时(12 或24 小时制)、星期、日期、月份和年份。此外,还可提供二进制格式的亚秒值' _. Y, s+ i7 y, x. B( }5 Y
7 \: B9 j0 C; p* L
可以读取 RTC_TR 和 RTC_DR 来得到当前时间和日期信息,不过需要注意的是:时间和日期都是以 BCD 码的格式存储的,读出来要转换一下,才可以得到十进制的数据,在读的时侯,以二进制格式读出来的数据可以直接使用。1 A3 _& N' q* c7 p! E5 O) y* P+ ?* \( J

6 y$ D9 r; M' f- `3 C$ PSTM32G4 提供两个可编程闹钟:闹钟 A(ALARM_A)和闹钟 B(ALARM_B)。通过 RTC_CR寄存器的 ALRAE 和 ALRBE 位置 1 来使能可编程闹钟功能。当日历的亚秒、秒、分、小时、日期分别与闹钟寄存器 RTC_ALRMASSR/RTC_ALRMAR 和 RTC_ALRMBSSR/RTC_ALRMBR中的值匹配时,则可以产生闹钟(需要适当配置)
5 I! j! ?4 Y& L) f2 t$ b7 n6 x/ i, c+ b& A7 {  k  d" F3 C
小结:
; s  W7 ^% h, @+ r4 v0 ?RTC配置一般步骤:& ?. [6 `! Q/ M/ }
① 使能PWR和BKP时钟
4 F1 M( y1 o# u+ \! ~% O② 使能后备寄存器访问
4 ]. D) s; f, A" b% o7 q7 [③ 配置RTC时钟源,使能RTC时钟:
2 ~, W: w) o$ Y; U" G4 T如果使用LSE,要打开LSE:RCC_LSEConfig(RCC_LSE_ON);
. a2 M) \% S) |# c1 P4 `④ 设置RTC预分频系数
  D, s9 @1 r  L/ ~⑤ 设置时间
# r, [2 V. X( r4 d3 @⑥开启相关中断(如果需要)' p+ [/ Q7 ?# P8 `$ [1 S
⑦编写中断服务函数
* V1 \, j, |; ]: H* x⑧部分操作要等待写操作完成和同步。
5 M7 k  I1 ]& T3 ?. \3 D
1 H; v, j7 K9 v. ~0 i二、STM32CubeMX配置
; {6 Z% z# y- Z(1)RTC使能时钟源和日历, I% k4 Y+ B8 S
HLMFZ{RU_{6LFODJ(S]GII6.png ; l! t4 @8 {  C$ R
' a: r+ a" o; i& \; e, S4 R
(2)配置时钟来源,选择外部时钟HSE,经32分频,得到750Khz
3 p- w6 d& ^$ y4 F% m+ `) H( `/ J0 B; z" {
}W$@AD`%]U7]YVA0XFVC4PQ.png
2 J  V7 c4 d. b: z. m, R4 |9 O' v( j" a2 t) p/ I
(3)设置分频和时间
; |4 Z, s  B/ i1 w" m9 Q& r8 T/ v: [$ F$ ^: h/ M5 d
P86[BPN2G3KUP[NISHUU}WN.png 7 L  @% X( D3 Q
5 w- v: e0 V6 B/ K% v
注意,一定要选择好两次分频的系数,使经过两次分频后的时钟频率为1hz
$ G* @1 ], ?" H( k7 r; A
) _' m0 O( k$ U" @6 X750 000 / 125 / 6000 = 1
& z0 ^" T" y: T4 E. z
, u8 r9 S6 ^: R' E* H3 K4 m( P三、部分源码
& J/ Y& @8 C4 t1 O! b$ S' z
  1. RTC_TimeTypeDef  H_S_M_Time; // 时间结构体- Y+ x) o+ D- |7 |) J
  2. RTC_DateTypeDef  Y_M_D_Data; // 日期结构体+ Q/ r6 f1 `, ~2 j8 r
  3. 8 ~6 j4 i( F. |% j7 }
  4. // 获取日期和时间必须同时使用,注意这里的编码方式选择二进制,可以直接使用
    & E$ J' _6 S5 Y% E  H
  5.         // 若选择BCD编码,需要自己处理数据
    ' Z2 m% b3 P9 k9 W. M% R
  6.         HAL_RTC_GetTime(&hrtc, &H_S_M_Time,RTC_FORMAT_BIN);3 ?7 E: s, n  v  x$ \0 ?/ w
  7.         HAL_RTC_GetDate(&hrtc, &Y_M_D_Data,RTC_FORMAT_BIN);- U. Q4 u* }3 b5 f4 `6 {
  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);
    6 v' o$ m' P. R. B% }
  9.         LCD_DisplayStringLine(Line0, Lcd_Display_String);
复制代码
# ^: V+ {/ b/ ^" z
- w7 C+ O( \- M- F! }

0 @. N  j& {6 w* V# H+ t# G& o6 C. o- u! @4 |4 L# Q: X- S! Q
收藏 评论0 发布时间:2022-7-5 19:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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