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

【STM32】RTC详解

[复制链接]
STMCU 发布时间:2020-9-11 11:06
01. RTC概述

实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。RTC 提供一个日历时钟、两个可编程闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。RTC 还包含用于管理低功耗模式的自动唤醒单元。


两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时(12 或 24 小时制)、星期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。


系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。并且还可以进行夏令时补偿。


其它 32 位寄存器还包含可编程的闹钟亚秒、秒、分钟、小时、星期几和日期。此外,还可以使用数字校准功能对晶振精度的偏差进行补偿。


上电复位后,所有 RTC 寄存器都会受到保护,以防止可能的非正常写访问。


无论器件状态如何(运行模式、低功耗模式或处于复位状态),只要电源电压保持在工作范围内,RTC 便不会停止工作。


02. RTC主要特性

RTC 单元的主要特性如下(参见 图 222 : RTC 框图 ):


● 包含亚秒、秒、分钟、小时(12/24 小时制)、星期几、日期、月份和年份的日历。
● 软件可编程的夏令时补偿。
● 两个具有中断功能的可编程闹钟。可通过任意日历字段的组合驱动闹钟。
● 自动唤醒单元,可周期性地生成标志以触发自动唤醒中断。
● 参考时钟检测:可使用更加精确的第二时钟源(50 Hz 或 60 Hz)来提高日历的精确度。
● 利用亚秒级移位特性与外部时钟实现精确同步。
● 可屏蔽中断/事件:
— 闹钟 A
— 闹钟 B
— 唤醒中断
— 时间戳
— 入侵检测
● 数字校准电路(周期性计数器调整)
— 精度为 5 ppm
— 精度为 0.95 ppm,在数秒钟的校准窗口中获得
● 用于事件保存的时间戳功能(1 个事件)
● 入侵检测:
— 2 个带可配置过滤器和内部上拉的入侵事件
● 20 个备份寄存器(80 字节)。发生入侵检测事件时,将复位备份寄存器。

● 复用功能输出 (RTC_OUT),可选择以下两个输出之一:
— RTC_CALIB:512 Hz 或 1 Hz 时钟输出(LSE 频率为 32.768 kHz)。
可通过将 RTC_CR 寄存器中的 COE[23] 位置 1 来使能此输出。该输出可连接到器件 RTC_AF1 功能。
— RTC_ALARM(闹钟 A、闹钟 B 或唤醒)。
可通过配置 RTC_CR 寄存器的 OSEL[1:0] 位选择此输出。该输出可连接到器件RTC_AF1 功能。
● RTC 复用功能输入:
— RTC_TS:时间戳事件检测。该输入可连接到器件 RTC_AF1 和 RTC_AF2 功能。
— RTC_TAMP1:TAMPER1 事件检测。该输入可连接到器件 RTC_AF1 和 RTC_AF2功能。
— RTC_TAMP2:TAMPER2 事件检测。
— RTC_REFIN:参考时钟输入(通常为市电,50 Hz 或 60 Hz)。

1.png


03. RTC部分功能3.1 时钟和预分频器

RTC 时钟源 (RTCCLK) 通过时钟控制器从 LSE 时钟、LSI 振荡器时钟以及 HSE 时钟三者中选择。有关 RTC 时钟源配置的更多信息,请参见 第 6 节:复位和时钟控制 (RCC)。

可编程的预分频器阶段可生成 1 Hz 的时钟,用于更新日历。为最大程度地降低功耗,预分频器分为 2 个可编程的预分频器(参见 图 222 : RTC 框图 ):
● 一个通过 RTC_PRER 寄存器的 PREDIV_A 位配置的 7 位异步预分频器。
● 一个通过 RTC_PRER 寄存器的 PREDIV_S 位配置的 15 位同步预分频器。

注意: 使用两个预分频器时,推荐将异步预分频器配置为较高的值,以最大程度降低功耗。

要使用频率为 32.768 kHz 的 LSE 获得频率为 1 Hz 的内部时钟 (ck_spre),需要将异步预分频系数设置为 128,并将同步预分频系数设置为 256。分频系数的最小值为 1,最大值为 2 ^22 。这对应于约为 4 MHz 的最大输入频率。f ck_apre 可根据以下公式得出:

2.png



3.2 实时时钟和日历

RTC 日历时间和日期寄存器可通过与 PCLK1(APB1 时钟)同步的影子寄存器来访问。这些时间和日期寄存器也可以直接访问,这样可避免等待同步的持续时间。

● RTC_SSR 对应于亚秒
● RTC_TR 对应于时间
● RTC_DR 对应于日期

每隔两个 RTCCLK 周期,便将当前日历值复制到影子寄存器,并将 RTC_ISR 寄存器的 RSF位置 1(请参见 第 23.6.4 节 )。在停机和待机模式下不会执行复制操作。退出这两种模式时,影子寄存器会在最长 2 个 RTCCLK 周期后进行更新。

当应用读取日历寄存器时,它会访问影子寄存器的内容。也可以通过将 RTC_CR 寄存器的BYPSHAD 控制位置 1 来直接访问日历寄存器。默认情况下,该位被清零,用户访问影子寄存器。

在 BYPSHAD=0 模式下读取 RTC_SSR、RTC_TR 或 RTC_DR 寄存器时,APB 时钟频率(f APB ) 必须至少为 RTC 时钟频率 (f RTCCLK ) 的 7 倍。影子寄存器通过系统复位来复位。


04. RTC低功耗模式和中断

低功耗模式

3.png


RTC中断

所有 RTC 中断均与 EXTI 控制器相连。

要使能 RTC 闹钟中断,需按照以下顺序操作:

  • 将 EXTI 线 17 配置为中断模式并将其使能,然后选择上升沿有效。

  • 配置 NVIC 中的 RTC_Alarm IRQ 通道并将其使能。

  • 配置 RTC 以生成 RTC 闹钟(闹钟 A 或闹钟 B)。




要使能 RTC 唤醒中断,需按照以下顺序操作:

  • 将 EXTI 线 22 配置为中断模式并将其使能,然后选择上升沿有效。

  • 配置 NVIC 中的 RTC_WKUP IRQ 通道并将其使能。

  • 配置 RTC 以生成 RTC 唤醒定时器事件。




要使能 RTC 入侵中断,需按照以下顺序操作:

  • 将 EXTI 线 21 配置为中断模式并将其使能,然后选择上升沿有效。

  • 配置 NVIC 中的 TAMP_STAMP IRQ 通道并将其使能。

  • 配置 RTC 以检测 RTC 入侵事件。




要使能 RTC 时间戳中断,需按照以下顺序操作:

  • 将 EXTI 线 21 配置为中断模式并将其使能,然后选择上升沿有效。

  • 配置 NVIC 中的 TAMP_STAMP IRQ 通道并将其使能。

  • 配置 RTC 以检测 RTC 时间戳事件。




05. RTC寄存器5.1RTC 时间寄存器 (RTC_TR)

RTC time register
RTC_TR 是日历时间影子寄存器。只能在初始化模式下对该寄存器执行写操作。
偏移地址:0x00
上电复位值:0x0000 0000
系统复位:当 BYPSHAD = 0 时为 0x0000 0000;当 BYPSHAD = 1 时不受影响。

5.png


5.2 RTC 日期寄存器 (RTC_DR)

RTC date register
RTC_DR 是日历日期影子寄存器。只能在初始化模式下对该寄存器执行写操作。
偏移地址:0x04
上电复位值:0x0000 2101

6.png



5.3 RTC 控制寄存器 (RTC_CR)

RTC control register
偏移地址:0x08
上电复位值:0x0000 0000
系统复位:不受影响

7.png


位 22:21 OSEL[1:0]:输出选择 (Output selection)
这些位用于选择要连接到 RTC_ALARM 输出的标志
00:禁止输出
01:使能闹钟 A 输出
10:使能闹钟 B 输出
11:使能唤醒输出
位 20 POL:输出极性 (Output polarity)
该位用于配置 RTC_ALARM 输出的极性
0:当 ALRAF/ALRBF/WUTF 置 1 时(取决于 OSEL[1:0]),该引脚为高电平
1:当 ALRAF/ALRBF/WUTF 置 1 时(取决于 OSEL[1:0]),该引脚为低电平
位 19 COSEL:校准输出选择 (Calibration output selection)
当 COE=1 时,该位可选择 RTC_CALIB 上输出的信号。
0:校准输出为 512 Hz
1:校准输出为 1 Hz
在 RTCCLK 为 32.768 kHz 且预分频器为其默认值(PREDIV_A=127 且 PREDIV_S=255)
的条件下,这些频率有效。请参见 第 23.3.14 节:校准时钟输出 。
位 18 BKP:备份 (Backup)
用户可对此位执行写操作以记录是否已对夏令时进行更改。
位 17 SUB1H:减少 1 小时(冬季时间更改)(Subtract 1 hour (winter time change))
当该位在初始化模式以外的模式下置 1 时,如果当前小时不是 0,则日历时间将减少 1 小
时。此位始终读为 0。
当前小时为 0 时,将此位置 1 没有任何作用。
0:无作用。
1:将当前时间减少 1 小时。这可用于冬季时间更改。
位 16 ADD1H:增加 1 小时(夏季时间更改)(Add 1 hour (summer time change))
当该位在初始化模式以外的模式下置 1 时,日历时间将增加 1 小时。此位始终读为 0。
0:无作用。
1:将当前时间增加 1 小时。这可用于夏季时间更改
位 15 TSIE:时间戳中断使能 (Timestamp interrupt enable)
0:禁止时间戳中断
1:使能时间戳中断
位 14 WUTIE:使能唤醒定时器使能 (Wakeup timer interrupt enable)
0:禁止唤醒定时器中断
1:使能唤醒定时器中断
位 13 ALRBIE: 闹钟 B 中断使能 (Alarm B interrupt enable)
0:闹钟 B 中断禁止
1:闹钟 B 中断使能
位 12 ALRAIE:闹钟 A 中断使能 (Alarm A interrupt enable)
0:禁止闹钟 A 中断
1:使能闹钟 A 中断
位 11 TSE:时间戳使能 (Time stamp enable)
0:禁止时间戳
1:使能时间戳
位 10 WUTE:唤醒定时器使能 (Wakeup timer enable)
0:禁止唤醒定时器
1:使能唤醒定时器

位 9 ALRBE: 闹钟 B 使能 (Alarm B enable)
0:禁止闹钟 B
1:使能闹钟 B
位 8 ALRAE :闹钟 A 使能 (Alarm A enable)
0:禁止闹钟 A
1:使能闹钟 A
位 7 DCE :粗略数字校准使能 (Coarse digital calibration enable)
0:禁止数字校准
1:使能数字校准
PREDIV_A 必须大于或等于 6
位 6 FMT:小时格式 (Hour format)
0:24 小时/天格式
1:AM/PM 小时格式
位 5 BYPSHAD:旁路影子寄存器 (Bypass the shadow registers)
0:日历值(从 RTC_SSR、RTC_TR 和 RTC_DR 读取时)取自影子寄存器,该影子寄存器
每两个 RTCCLK 周期更新一次。
1:日历值(从 RTC_SSR、RTC_TR 和 RTC_DR 读取时)直接取自日历计数器。
注意:如果 APB1 时钟的频率低于 7 倍的 RTCCLK 频率,则必须将 BYPSHAD 置“ 1 ”。
位 4 REFCKON:参考时钟检测使能(50 Hz 或 60 Hz)(Reference clock detection enable (50 or
60 Hz))
0:禁止参考时钟检测
1:使能参考时钟检测
注意: PREDIV_S 必须为 0x00FF 。
位 3 TSEDGE:时间戳事件有效边沿 (Timestamp event active edge)
0:TIMESTAMP 上升沿生成时间戳事件
1:TIMESTAMP 下降沿生成时间戳事件
TSEDGE 发生更改时,必须复位 TSE 以避免将 TSF 意外置 1
位 2:0 WUCKSEL[2:0]:唤醒时钟选择 (Wakeup clock selection)
000:选择 RTC/16 时钟
001:选择 RTC/8 时钟
010:选择 RTC/4 时钟
011:选择 RTC/2 时钟
10x:选择 ck_spre 时钟(通常为 1 Hz)
11x:选择 ck_spre 时钟(通常为 1 Hz)并将 WUT 计数器值增加 2 16 (见下面的注释)

温馨提示

WUT = 唤醒单元计数器值。当 WUCKSEL[2:1 = 11] 时, WUT = (0x0000 to 0xFFFF) +0x10000 (增加的值)。
只能在初始化模式下 (RTC_ISR/INITF = 1) 对该寄存器的位 7 、 6 和 4 执行写操作。
只能在 RTC_CR WUTE 位 = 0 且 RTC_ISR WUTWF 位 = 1 时对该寄存器的位 2 到 0 执行写操作。
建议不要在日历小时递增时更改小时,因为这样做会屏蔽日历小时的增量。ADD1H 和 SUB1H 的更改在下一秒生效。
此寄存器受写保护。第 576 页的 RTC 寄存器写保护中介绍了写访问的过程。


5.4 RTC 初始化和状态寄存器 (RTC_ISR)

RTC initialization and status register
偏移地址:0x0C
上电复位值:0x0000 0007
系统复位值:不受影响(INIT、INITF 和 RSF 除外,它们在复位时被清零)。

8.png


位 31:17 保留

位 16 RECALPF:重新校准挂起标志 (Recalibration pending Flag)
当软件对 RTC_CALR 寄存器执行写操作时,RECALPF 状态标志将自动置“1”,指示
RTC_CALR 寄存器已屏蔽。当采用新的校准设置时,该位恢复为“0”。请参见 动态重校准一节。

位 15 保留,必须保持复位值。

位 14 TAMP2F:TAMPER2 检测标志 (TAMPER2 detection flag)
在入侵输入 2 上检测到入侵检测事件时,由硬件将此标志置 1。该标志由软件写零清除。

位 13 TAMP1F:入侵检测标志 (Tamper detection flag)
当检测到入侵检测事件时,由硬件将此标志置 1。
该标志由软件写零清除。

位 12 TSOVF:时间戳溢出标志 (Timestamp overflow flag)
当在 TSF 已置 1 的情况下发生时间戳事件时,由硬件将此标志置 1。
该标志由软件写零清除。建议仅在 TSF 位清零之后再检查并清零 TSOVF 位。否则,如果时
间戳事件恰好在清零 TSF 位之前刚刚发生,则溢出事件可能会被漏掉。

位 11 TSF:时间戳标志 (Timestamp flag)
发生时间戳事件时,由硬件将此标志置 1。
该标志由软件写零清除。

位 10 WUTF:唤醒定时器标志 (Wakeup timer flag)
当唤醒自动重载计数器计数到 0 时,由硬件将此标志置 1。
该标志由软件写零清除。
软件必须在 WUTF 再次置 1 的 1.5 个 RTCCLK 周期之前将该标志清零。

位 9 ALRBF:闹钟 B 标志 (Alarm B flag)
当时间/日期寄存器(RTC_TR 和 RTC_DR)与闹钟 B 寄存器 (RTC_ALRMBR) 匹配时,由
硬件将该标志置 1。
该标志由软件写零清除。

位 8 ALRAF:闹钟 A 标志 (Alarm A flag)
当时间/日期寄存器(RTC_TR 和 RTC_DR)与闹钟 A 寄存器 (RTC_ALRMAR) 匹配时,由
硬件将该标志置 1。
该标志由软件写零清除。

位 7 INIT:初始化模式 (Initialization mode)
0:自由运行模式。
1:初始化模式,用于编程时间和日期寄存器(RTC_TR 和 RTC_DR)以及预分频器寄存器
(RTC_PRER)。计数器停止计数,当 INIT 被复位后,计数器从新值开始计数。

位 6 INITF:初始化标志 (Initialization flag)
当此位置 1 时,RTC 处于初始化状态,此时可更新事件、日期和预分频器寄存器。
0:不允许更新日历寄存器。
1:允许更新日历寄存器。

位 5 RSF:寄存器同步标志 (Registers synchronization flag)
每次将日历寄存器的值复制到影子寄存器(RTC_SSRx、RTC_TRx 和 RTC_DRx)时,都
会由硬件将此位置 1。在初始化模式下、平移操作挂起时 (SHPF=1) 或在旁路影子寄存器模
式 (BYPSHAD=1) 下,该位由硬件清零。该位还可由软件清零。
0:日历影子寄存器尚未同步
1:日历影子寄存器已同步

位 4 INITS:初始化状态标志 (Initialization status flag)
当日历年份字段不为 0 时(上电复位状态),由硬件将该位置 1。
0:日历尚未初始化
1:日历已经初始化

位 3 SHPF:平移操作挂起 (Shift operation pending)
0:没有平移操作挂起
1:某个平移操作挂起
只要通过对 RTC_SHIFTR 寄存器执行写操作来启动平移操作,此标志便由硬件置 1。执行完
相应的平移操作后,此标志由硬件清零。对 SHPF 执行写入操作不起作用。

位 2 WUTWF:唤醒定时器写标志 (Wakeup timer write flag)
在 RTC_CR 寄存器中的 WUTE 位置 0 后,当唤醒定时器值可更改时,由硬件将该位置 1。
0:不允许更新唤醒定时器配置
1:允许更新唤醒定时器配置

位 1 ALRBWF:闹钟 B 写标志 (Alarm B write flag)
在 RTC_CR 寄存器中的 ALRBIE 位置 0 之后,当闹钟 B 的值可更改时,由硬件将该位置 1。
该位在初始化模式下由硬件清零。
0:不允许更新闹钟 B
1:允许更新闹钟 B

位 0 ALRAWF:闹钟 A 写标志 (Alarm A write flag)
在 RTC_CR 寄存器中的 ALRAE 位置 0 后,当闹钟 A 的值可更改时,由硬件将该位置 1。
该位在初始化模式下由硬件清零。
0:不允许更新闹钟 A
1:允许更新闹钟 A


5.5 RTC 预分频器寄存器 (RTC_PRER)

RTC prescaler register
偏移地址:0x10
上电复位值:0x007F 00FF


系统复位:不受影响

9.png


5.6 RTC 唤醒定时器寄存器 (RTC_WUTR)

RTC wakeup timer register
偏移地址:0x14
上电复位值:0x0000 FFFF
系统复位:不受影响

10.png


位 31:16 保留

位 15:0 WUT[15:0]:唤醒自动重载值位 (Wakeup auto-reload value bit)
当使能唤醒定时器时(WUTE 置 1),每 (WUT[15:0] + 1) 个 ck_wut 周期将 WUTF 标志置 1一次。ck_wut 周期通过 RTC_CR 寄存器的 WUCKSEL[2:0] 位进行选择。
当 WUCKSEL[2] = 1 时,唤醒定时器变为 17 位,WUCKSEL[1] 等效为 WUT[16],即要重载到定时器的最高有效位。

注意: WUTF 第一次置 1 发生在 WUTE 置 1 之后 (WUT+1) 个 ck_wut 周期。禁止在
WUCKSEL[2:0]=011(RTCCLK/2) 时将 WUT[15:0] 设置为 0x0000 。


5.7 RTC 校准寄存器 (RTC_CALIBR)

RTC calibration register
偏移地址:0x18
上电复位值:0x0000 0000

系统复位:不受影响


11.png


5.8 RTC 闹钟 A 寄存器 (RTC_ALRMAR)

RTC alarm A register
偏移地址:0x1C
上电复位值:0x0000 0000
系统复位:不受影响


12.png


位 31 MSK4:闹钟 A 日期掩码 (Alarm A date mask)
0:如果日期/日匹配,则闹钟 A 置 1
1:在闹钟 A 比较中,日期/日无关

位 30 WDSEL:星期几选择 (Week day selection)
0:DU[3:0] 代表日期的个位
1:DU[3:0] 代表星期几。DT[1:0] 为无关位。

位 29:28 DT[1:0]:日期的十位(BCD 格式)(Date tens in BCD format)。

位 27:24 DU[3:0]:日期的个位或日(BCD 格式)(Date units or day in BCD format)。

位 23 MSK3:闹钟 A 小时掩码 (Alarm A hours mask)
0:如果小时匹配,则闹钟 A 置 1
1:在闹钟 A 比较中,小时无关

位 22 PM :AM/PM 符号 (AM/PM notation)
0:AM 或 24 小时制
1:PM

位 21:20 HT[1:0]:小时的十位(BCD 格式)(Hour tens in BCD format)。

位 19:16 HU[3:0]:小时的个位(BCD 格式)(Hour units in BCD format)。

位 15 MSK2:闹钟 A 分钟掩码 (Alarm A minutes mask)
0:如果分钟匹配,则闹钟 A 置 1
1:在闹钟 A 比较中,分钟无关

位 14:12 MNT[2:0]:分钟的十位(BCD 格式)(Minute tens in BCD format)。

位 11:8 MNU[3:0]:分钟的个位(BCD 格式)(Minute units in BCD format)。

位 7 MSK1:闹钟 A 秒掩码 (Alarm A seconds mask)
0:如果秒匹配,则闹钟 A 置 1

1:在闹钟 A 比较中,秒无关

位 6:4 ST[2:0]:秒的十位(BCD 格式)(Second tens in BCD format)。
位 3:0 SU[3:0]:秒的个位(BCD 格式)(Second units in BCD format)。


5.9 RTC 写保护寄存器 (RTC_WPR)

RTC write protection register
偏移地址:0x24
复位值:0x0000 0000


13.png


5.10 RTC 亚秒寄存器 (RTC_SSR)

RTC sub second register
偏移地址:0x28
上电复位值:0x0000 0000
系统复位:当 BYPSHAD = 0 时为 0x0000 0000;当 BYPSHAD = 1 时不受影响。

14.png


5.11 RTC 时间戳时间寄存器 (RTC_TSTR)

RTC time stamp time register
偏移地址:0x30
上电复位值:0x0000 0000
系统复位:不受影响

15.png

5.12 RTC 备份寄存器 (RTC_BKPxR)

RTC backup registers
偏移地址:0x50 到 0x9C
上电复位值:0x0000 0000
系统复位:不受影响


16.png



4.png
收藏 1 评论0 发布时间:2020-9-11 11:06

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

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