STM32H7获取时间函数
时间: 2025-05-17 21:13:53 浏览: 10
### STM32H7 时间获取函数实现
在 STM32H7 微控制器中,可以利用 RTC(实时时钟)模块来实现时间获取功能。RTC 是一种低功耗外设,能够提供日历和时钟的功能。通过 HAL 库接口调用相关 API 可以轻松配置并读取当前时间。
以下是基于 HAL 库的时间初始化与获取的代码示例:
#### 初始化 RTC 功能
为了使能 RTC 并设置初始时间为指定值,需完成如下操作:
1. 配置 LSE 或 MSI/LSI 作为 RTC 的时钟源。
2. 设置日期和时间到 RTC 寄存器。
3. 启动 RTC 外设。
```c
#include "stm32h7xx_hal.h"
void MX_RTC_Init(void) {
RTC_HandleTypeDef hrtc;
/** Initialize RTC and set the Time and Date */
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24; // 使用 24 小时制
hrtc.Init.AsynchPrediv = 127; // 异步预分频系数 (LSE/LSI)
hrtc.Init.SynchPrediv = 255; // 同步预分频系数
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE; // 禁用 RTC 输出信号
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) != HAL_OK) {
Error_Handler();
}
/* Set initial time to RTC */
RTC_TimeTypeDef sTime = {0};
sTime.Hours = 12;
sTime.Minutes = 30;
sTime.Seconds = 0;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK) {
Error_Handler();
}
}
```
上述代码完成了 RTC 的基本初始化工作,并设置了默认时间为 `12:30:00`[^2]。
#### 获取当前时间
一旦 RTC 被成功初始化,可以通过以下方法读取实时时间数据:
```c
void Get_Current_Time(void) {
RTC_TimeTypeDef currentTime;
RTC_DateTypeDef currentDate;
HAL_StatusTypeDef status = HAL_RTC_GetTime(&hrtc, ¤tTime, RTC_FORMAT_BIN);
if (status == HAL_OK) {
printf("Current Time: %02d:%02d:%02d\n",
currentTime.Hours, currentTime.Minutes, currentTime.Seconds);
HAL_RTC_GetDate(&hrtc, ¤tDate, RTC_FORMAT_BIN);
printf("Current Date: %02d/%02d/%02d\n",
currentDate.Date, currentDate.Month, currentDate.Year);
} else {
Error_Handler();
}
}
```
此部分展示了如何从硬件寄存器提取时间和日期信息,并将其打印出来[^3]。
### 注意事项
- **时钟源选择**:对于 H7 系列 MCU 来说,默认推荐使用外部晶振(LSE),因为它更加稳定可靠;如果应用环境不允许增加额外元件,则可以选择内部 RC 振荡器(MSI 或 LSI)。不过需要注意的是,后者精度较低,在长时间运行下可能会累积较大误差。
- **电源管理**:当进入待机模式或者关闭 VBAT 供电之后,RTC 数据将会丢失。因此建议始终保留电池备份电路给 RTC 提供独立供电路径[^4]。
阅读全文
相关推荐
















