基于STM32F4的cubemx关于RTC配置说明

文章目录


前言

本文基于STM32F4系列芯片,搭配参考手册,在cubemx上详细解释各种配置的含义。


一、RTC是什么?

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

两个 32 位寄存器包含二进码十进数格式 (BCD) 的秒、分钟、小时(12 或 24 小时制)、星 期几、日期、月份和年份。此外,还可提供二进制格式的亚秒值。系统可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。并且还可以进行夏令时

补偿。

其它 32 位寄存器还包含可编程的闹钟亚秒、秒、分钟、小时、星期几和日期。此外,还可以使用数字校准功能对晶振精度的偏差进行补偿。上电复位后,所有 RTC 寄存器都会受到保护,以防止可能的非正常写访问。

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

二、cubemx配置参数说明

首先选中Activate Clock Source ,下面出现三个参数配置。
Hour Format: 用来选择12小时格式还是24小时格式
Asynchronous Predivider value: 选择7位异步预分频数值。
Synchronous Predivider value 选择15位同步预分频数值。

搭配上面的RTC框图,一般选择LSE最为RTC时钟源,经过7位异步预分频得到ck_apre,作为亚秒递减计数器的时钟,粗略校准之后再经过15位同步预分频得到ck_spre,作为日历和16位唤醒自动重载定时器的时钟。

一般ck_spre要求为1Hz,使用两个预分频器生成ck_spre,最好设置7位异步预分频数值越大越好,以最大程度降低功耗。

选中Activate Calendar 使能日历。
Calendar Time 用来设置时、分、秒数值,可读可写。
Data Format 用来设置数据存储格式,可以设置二进制存储和BCD码存储,不过手册上明确说明了使用BCD码存储。
Day Light Saving: value of hour adjustment 用于设置夏令时调整,夏令时是一种为节约能源而人为调整时间的制度,可以设置为不调整、调快1小时和调慢1小时。
Store Operation 用于将当前的夏令时调整状态存储到 RTC 备份寄存器(BKP_DR0)中。这样即使系统断电或复位,RTC 也能记住当前的夏令时设置,确保时间显示的连续性。具有清除和存储两种操作。

清除操作场景

首次配置夏令时,需要初始化存储状态

禁用夏令时功能时,清除之前的存储记录。

储存操作场景

启用夏令时并调整时钟后(如从标准时间切换到夏令时)。

系统重启后,需要恢复之前的夏令时设置。
Calendar Date 用来设置日历的日期、月份、日份和年份。

根据RTC框图可知,RTC有两个可编程闹钟,对应Alarm AAlarm B

每个闹钟可以直接产生或者复用到AF1 。每个闹钟可设置时、分、秒、亚秒。接着就是一堆屏蔽设置。

Alarm mask hours 为例

Alarm mask hours 是一个掩码位,用于控制闹钟(Alarm A)是否需要匹配小时值。具体来说:

启用掩码:闹钟触发时不检查小时值,只要分钟、秒等其他匹配条件满足,闹钟就会触发。

禁用掩码:闹钟触发时必须匹配设定的小时值,否则即使其他条件满足也不会触发。

假设你设置闹钟时间为 12:30:00(小时 = 12,分钟 = 30,秒 = 0):

Alarm mask hours = enable

此时闹钟会忽略小时值,只要分钟为 30 且秒为 0,每小时都会触发一次(例如 01:30:00、02:30:00 等)。

Alarm mask hours = disable

此时闹钟只会在小时 = 12、分钟 = 30、秒 = 0时触发,即每天的 12:30:00 触发一次。
Alarm Date Week Day Sel 指定闹钟使用日期(Date)还是星期(Week day)作为匹配条件。Date:使用日期(1~31)作为匹配条件。Week Day:使用星期(周一~周日)作为匹配条件。

下面的 Alarm Week DayAlarm Day 就是具体匹配的星期或日期。

根据RTC框图可知,RTC有一个16位唤醒自动重载定时器,对应Wake UP 。RTC 的唤醒定时器可用于从低功耗模式(如停止模式、待机模式)自动唤醒 STM32,实现定时唤醒功能,降低系统功耗。同样可以直接产生或者复用到AF1 。
wake up clock 用于设置定时器时钟,可以是2、4、8 或 16 分频的 RTC 时钟,当 RTCCLK 为 LSE (32.768 kHz) 时,可配置的唤醒中断周期介于 122 μs 和 32 s 之间, 且分辨率低至 61 μs。

当选择 ck_spre (1Hz)时钟,可得到的唤醒时间为 1s 到 36h 左右,分辨率为 1 秒。因为定时较长,可以选择WUCKSEL[2] = 1,把定时器从16位扩展为17位,最高位由WUCKSEL[1]代替。

**WakeUp Counter:**设置唤醒周期的计数值。

Timestamp Routed to AF1 时间戳复用至 AF1

时间戳(Timestamp)功能:当特定外部事件(如引脚上升 / 下降沿)发生时,RTC 自动记录当前的日期和时间,用于事件发生时刻的精确追踪。将时间戳功能连接到特定的复用功能引脚(AF1),使外部事件发生能够被RTC捕获,从而触发时间戳记录。
Tamper1 Routed to AF1 防篡改引脚复用至 AF1

防篡改(Tamper)功能:检测外部物理干预(如电池被取出、设备被拆卸),并在检测到篡改时:

触发中断或复位。

自动清除 RTC 备份寄存器中的敏感数据(如加密密钥)。

防篡改引脚复用至 AF1,用于外部篡改事件的检测。
Calibration 校准时钟输出,可以选择512Hz或1Hz输出的 RTC_CALIB,或者不输出。
Reference Clock Detection(参考时钟检测)自动检测 RTC 时钟源(如 LSE、LSI)的稳定性,确保 RTC 计时准确。


总结

本章简单的对RTC在cubemx的配置参数进行了大致说明,因为有些功能缺乏一些实践验证,所以在解释中有所不足或者说有所错误,欢迎大家指出。希望本章内容在大家配置RTC是能有所帮助。

相关推荐
清水迎朝阳4 天前
火山 RTC 引擎9 ----集成 appkey
实时音视频·video·rtc·appkey
清水迎朝阳8 天前
火山RTC 8 SDK集成进项目中
实时音视频·rtc·字节·火山rtc
清水迎朝阳10 天前
火山RTC 7 获得远端裸数据
实时音视频·rtc·远端裸数据·裸数据
清水迎朝阳1 个月前
火山RTC 3 创建RTC引擎
实时音视频·rtc·火山rtc·互动·火山
chen_song_2 个月前
WebRTC中音视频服务质量QoS之FEC+NACK调用流程
udp·音视频·webrtc·rtc·h264·nack·fec
小雀丝2 个月前
单片机外设快速入门(三)——定时器篇
stm32·单片机·嵌入式硬件·cubemx·定时器
梦可尤曦3 个月前
Freertos卡在while( uxDeletedTasksWaitingCleanUp > ( UBaseType_t ) 0U )
stm32·嵌入式硬件·cubemx·freertos
音视频开发_AIZ3 个月前
RTC、直播、点播技术对比|腾讯云/即构/声网如何选型 — 2025 版
webrtc·实时音视频·直播·rtc·点播·即构
Black蜡笔小新3 个月前
AI大模型驱动的智能音视频通信:视频通话SDK工具EasyRTC在嵌入式设备中的应用探索
人工智能·语言模型·大模型·音视频·webrtc·rtc