stm32H7 RTC数据寄存器
时间: 2025-02-13 13:13:52 浏览: 48
### STM32H7 RTC 数据寄存器结构与用法
#### 1. 寄存器概述
STM32H7系列微控制器中的RTC模块提供了多个用于存储时间、日期以及用户自定义数据的寄存器。这些寄存器可以分为两类:预装载寄存器(Preload Registers)和影子寄存器(Shadow Registers)。当RTC处于配置模式时,可以直接访问预装载寄存器;而一旦退出配置模式并更新了影子寄存器,则后者会自动同步到前者。
#### 2. 主要寄存器描述
##### TR (Time Register)
该寄存器保存当前的时间信息,包括小时、分钟和秒数。它由硬件定时器不断更新,在每次秒钟中断发生时刷新一次。TR寄存器的内容可以通过软件读取来获取实时时间戳[^1]。
```c
// 获取当前时间
uint32_t time_value = HAL_RTC_GetTime(&hrtc, &sTime, FORMAT_BIN);
```
##### DR (Date Register)
此寄存器记录着日历日期——即年份、月份、星期几及具体哪一天的数据。同样地,DR也会随着内部计数器的变化被周期性重置或调整。
```c
// 设置日期
HAL_StatusTypeDef status = HAL_RTC_SetDate(&hrtc, &sDate, FORMAT_BIN);
if(status != HAL_OK){
// 错误处理逻辑...
}
```
##### SSR (Sub Second Register)
用来表示不足一秒的小数值部分,通常配合TR一起使用以实现更精确的时间测量功能。
```c
// 读取亚秒级精度
uint32_t subsecond = __HAL_RTC_GET_SUBSECOND(hrtc.Instance);
```
##### ALRMAR/ALRMBR (Alarm A/B Register)
这两个报警寄存器允许设定两个独立的闹钟事件触发条件,支持按天重复或者指定某一日的具体时刻作为唤醒源之一。
```c
// 配置闹钟A
RTC_AlarmTypeDef sAlarm;
sAlarm.AlarmTime.Hours = 8; /* AM */
sAlarm.AlarmTime.Minutes = 0;
sAlarm.AlarmTime.Seconds = 0;
sAlarm.AlarmMask = RTC_ALARMMASK_NONE;
HAL_RTC_SetAlarm_IT(&hrtc,&sAlarm,FORMAT_BIN);
```
#### 3. 备份区域(BKP)操作流程
对于想要利用备份区域内特定地址空间的应用程序来说,除了上述标准接口外还需要额外注意几点事项:
- 开启电源控制(PWR)与时基(TS)模块对应的APB1总线上的时钟信号;
- 调用`__HAL_RCC_PWR_CLK_ENABLE()` 和 `HAL_PWR_EnableBkUpAccess()` 来解锁对该区间的访问权限;
- 使用专用API如`HAL_RTCEx_BKUPWrite()` 或者直接通过指针方式向相应偏移量位置写入目标值[^3]。
```c
/* 启用PWR时钟 */
__HAL_RCC_PWR_CLK_ENABLE();
/* 解锁BKPSRAM访问 */
HAL_PWR_EnableBkUpAccess();
/* 写入备份寄存器 */
HAL_RTCEx_BKUPWrite(&hrtc, RTC_BKP_DRx, Data);
/* 从备份寄存器中读回数据 */
Data = HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DRx);
```
阅读全文
相关推荐



















