RTC时钟

目录

一、STM32F407内部RTC硬件框图,主要由五大部分组成:

二、硬件相关引脚

三、具体代码设置步骤

四、了解其它知识点


一、STM32F407内部RTC硬件框图,主要由五大部分组成:

① 时钟源

(1)LSE:一般我们选择 LSE,即外部 32.768KHz 晶振作为时钟源(RTCCLK)。外部晶振具有精度高的优点。

(2)HSE:分频后的 HSE 可以作为备选使用的时钟源。

(3)****LSI:****LSI 是 STM32 芯片内部的低速 RC 振荡器,频率约 32 KHz,缺点是精度较低,一般不使用。

② 预分频器

预分配器(RTC_PRER)分为 2 个部分:一个通过 RTC_PRER 寄存器的 PREDIV_A 位配置的 7 位异步预分频器。另一个通过 RTC_PRER 寄存器的 PREDIV_S 位配置的 15 位同步预分频器。 于是我们只需要设置: PREDIV_A=0X7F,即 128 分频;PREDIV_S=0XFF,即 256 分频,即可得到 1Hz(1秒) 的 Fck_spre,用于更新日历。

③ 时间和日期相关寄存器

该部分包括三个影子寄存器, RTC_SSR (亚秒)、 RTC_TR (时间)、 RTC_DR(日期)。实时时钟一般表示为:时/分/秒/亚秒。RTC_TR 寄存器用于存储时/分/秒时间数据,可读可写(即可设置或者获取时间)。RTC_DR 寄存器用于存储日期数据,包括年/月/日/星期,可读可写(即可设置或者获取日期)。RTC_SSR 寄存器用于存储亚秒级的时间,这样我们可以获取更加精确的时间数据。

不过需要注意的是:时间和日期都是以 BCD 码的格式存储的,读出来要转换一下,才可以得到十进制的数据。

亚秒的实现:当影子RTC_SSR 寄存器递减到 0 的时候,会使用 PREDIV_S 的值重新装载 PREDIV_S,而PREDIV_S 一般为 255;++++而影子++++ ++++RTC_SSR++++ ++++寄存器递减++++ ++++的++++ ++++频率为前面7位异步分频器分频出来的频率为256Hz++++。这样,我们得到亚秒时间的精度是: 1/256 秒,即 3.9ms 左右。

④ 可编程闹钟

STM32F407 提供两个可编程闹钟:闹钟 A(ALARM_A)和闹钟 B(ALARM_B)。通过RTC_CR 寄存器的 ALRAE 和 ALRBE 位置 1 来使能闹钟。当亚秒、秒、分、小时、日期分别与闹钟寄存器 RTC_ALRMASSR/RTC_ALRMAR 和 RTC_ALRMBSSR/RTC_ALRMBR 中的值匹配时,则可以产生闹钟(需要适当配置)。本章我们将利用闹钟 A 产生闹铃,即设置RTC_ALRMASSR 和 RTC_ALRMAR 即可。

⑤ 周期性自动唤醒

STM32F407 的 RTC 不带秒钟中断了,但是多了++++一个周期性自动唤醒功能++++。周期性唤醒功能,由一个 16 位可编程自动重载递减计数器(RTC_WUTR)生成,可用于周期性中断/唤醒。

二、硬件相关引脚

(1)LSE时钟(32.768kHz)

PC14 和 PC15 可用作 GPIO 或 LSE 引脚

(2) VBAT要有电压:1.65V~3.6V

(3) RTC其它相关引脚:PC13 可用作 GPIO 或 RTC_AF1 引脚,PI8 可用作 RTC_AF2

三、具体代码设置步骤

1、初始化 RTC

(1) 在系统复位后,会自动禁止访问后备寄存器和 RTC,以防止对后备区域(BKP)的意外写操作。所以在要设置时间之前,先要取消备份区域(BKP)写保护;

(2) 初始化日期格式(HourFormat);RTC_PRER异步(AsynchPrediv = 0x7F)和同步寄存器(SynchPrediv = 0xFF);OutPut 用来选择要连接到 RTC_ALARM 输出的标志;OutPutPolarity 用来设置 RTC_ALARM 的输出极性,与 Output 成员变量配合使用;OutPutType 用来设置 RTC_ALARM 的输出类型为开漏输出还是推挽输出,与成员变量 OutPut 和 OutPutPolarity 配合使用。

(3) 读出bkr(0)寄存器的值,判断是否被修改过,如果修改过,说明电池有重新上电,要重新设置时间和日期。

2、配置WAKE UP中断,1秒钟中断一次:

3、获取时间和日期

四、了解其它知识点

1、BKP的作用

当Vdd关闭时,这些寄存器由VBAT供电,因而系统复位时,这些寄存器不会复位,并且当器件在低功耗模式下工作时,寄存器的内容仍然有效。可以理解为,只有后备电池不掉电,备份寄存器的都不会恢复默认值;用于判断电池是否掉过电,如果掉过电,需要重新设定时间。

常用,例如,RTC程序中,我们向DR1写入0x5050,开机读出寄存器值看是否有改变,检测是否已经配置过RTC,如果不是写入的值,说明电池有掉过电,需要重新设定时间和日期。

2、有些芯片自带的RTC,会是有整个完整日历相关的寄存器(如GD32F407VET6);而有些只有一个秒计时器,需要软件自己去做日历(如GD32F303VE);

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

相关推荐
love530love9 分钟前
【笔记】华硕 ROG MAXIMUS Z890 HERO 主板 BIOS 更新完整操作实录
运维·人工智能·windows·笔记·单片机·嵌入式硬件·bios
尼喃11 分钟前
3.7V升压5V 1A芯片精选推荐,高效率低功耗,满足工程需求
单片机·嵌入式硬件
小李做物联网16 分钟前
【单片机毕业设计】76.1基于单片机stm32智能浇灌系统毕业设计
stm32·单片机·嵌入式硬件·物联网
c106389151419 分钟前
stm32系列之编码器功能
stm32·单片机·嵌入式硬件
三品吉他手会点灯35 分钟前
STM32F103 学习笔记-20-通信的基本概念
笔记·stm32·单片机·嵌入式硬件·学习
悠哉悠哉愿意35 分钟前
【嵌入式学习笔记】GPIO与LED
笔记·单片机·嵌入式硬件·学习
v先v关v住v获v取36 分钟前
3D打印机的定量铺粉器设计13张 +三维图+设计说明书
科技·单片机·51单片机
点灯小铭44 分钟前
基于单片机的双机串口通信与数字串存储系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
chipsense1 小时前
霍尔电流传感器量程怎么确认,能覆盖实际电流监测需求么?
stm32·单片机·嵌入式硬件·霍尔电流传感器
点灯小铭1 小时前
基于单片机的压力温度水位检测与安全控制高压锅设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业