stm32f103c8t6rtc显示时间
时间: 2025-04-27 07:35:35 浏览: 38
### 配置 STM32F103C8T6 的 RTC 模块
为了使 STM32F103C8T6 正确显示时间,需要初始化并配置 RTC 模块。具体过程涉及设置时钟源、初始化结构体以及启动 RTC 功能。
#### 设置时钟源
RTC 可以由 LSI (Low Speed Internal) 或者 LSE (Low Speed External) 提供时钟信号。通常推荐使用更稳定的外部晶振 LSE 来作为 RTC 时钟源[^1]:
```c
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
```
#### 初始化 RTC 结构体
创建 `RTC_InitTypeDef` 类型变量用于存储初始参数,并调用 HAL 库函数完成初始化工作:
```c
RTC_HandleTypeDef hrtc;
void MX_RTC_Init(void)
{
__HAL_RCC_BKP_CLK_ENABLE();
/**Initialize RTC and set the Time and Date
*/
hrtc.Instance = RTC;
hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND; // 自动计算异步预分频器值使得一秒周期
hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
Error_Handler();
}
}
```
#### 向 RTC 写入时间和日期数据
通过 `RTC_TimeTypeDef` 和 `RTC_DateTypeDef` 定义的时间和日期结构体向硬件写入当前时刻的信息:
```c
RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef sDate = {0};
sTime.Hours = 14;
sTime.Minutes = 48;
sTime.Seconds = 55;
sDate.WeekDay = RTC_WEEKDAY_MONDAY;
sDate.Month = RTC_MONTH_JANUARY;
sDate.Date = 1;
sDate.Year = 21;
if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK){
/* Initialization Error */
}
if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK){
/* Initialization Error */
}
```
以上代码片段展示了如何在 STM32F103C8T6 上配置 RTC 并设定初始时间为下午两点四十八分五十五秒,星期一,每年的一月一号。
阅读全文
相关推荐


















