stm32g030c8t6 rtc使用lsi
时间: 2025-04-08 13:30:08 浏览: 36
### STM32G030C8T6 RTC 配置 LSI 时钟源
在 STM32 微控制器系列中,RTC(实时时钟模块)可以使用多种时钟源进行驱动,其中包括低速内部振荡器 (LSI)。对于 STM32G030C8T6 芯片而言,配置 RTC 使用 LSI 作为时钟源的过程涉及多个寄存器设置以及初始化操作。
以下是详细的配置过程:
#### 启用 LSI 并等待其稳定
为了使 RTC 正常工作,首先需要启用微控制器的低速内部振荡器 (LSI),并确保它已启动且处于稳定状态。这可以通过 RCC 控制器完成。
```c
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
// 初始化结构体用于配置 LSI
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI;
RCC_OscInitStruct.LSIState = RCC_LSI_ON; // 开启 LSI
HAL_RCC_OscConfig(&RCC_OscInitStruct); // 应用配置
while (!(RCC->CSR & RCC_CSR_LSIRDY)) {
; // 等待直到 LSI 就绪标志被设置 [^1]
}
```
#### 设置备份域访问权限
进入 RTC 的配置前,必须解锁 PWR 和 BKP 寄存器区域以便修改相关内容。
```c
__HAL_RCC_PWR_CLK_ENABLE(); // 使能电源接口时钟
HAL_PWREx_EnableBkUpAccess(); // 允许对备份寄存器区域进行写入操作
```
#### 切换 RTC 时钟源至 LSI
接下来指定 RTC 使用哪个信号作为输入时钟源,在这里我们选择 LSI。
```c
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RTC;
PeriphClkInitStruct.RTCClockSelection = RCC_RTCCLKSOURCE_LSI;
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
```
#### 初始化 RTC 模块
最后一步是对 RTC 进行基本参数设定,比如预分频值等。这些数值决定了最终输出给用户的精确度与时基频率。
```c
RTC_HandleTypeDef hrtc;
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 31; // 异步预分频系数, 取决于具体应用需求调整此值
hrtc.Init.SynchPrediv = 999; // 同步预分频系数, 结合异步部分共同决定总周期长度
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;// 输出功能关闭
if(HAL_RTC_Init(&hrtc)!= HAL_OK){
Error_Handler();
}
/* 如果需要立即更新当前时间 */
RTC_TimeTypeDef sTime ={0};
sTime.Hours=12;
sTime.Minutes=30;
sTime.Seconds=0;
HAL_RTC_SetTime(&hrtc,&sTime,RTC_FORMAT_BIN);
RTC_DateTypeDef DateToUpdate={0};
DateToUpdate.WeekDay=5;
DateToUpdate.Month=7;
DateToUpdate.Date=15;
DateToUpdate.Year=23;
HAL_RTC_SetDate(&hrtc,&DateToUpdate,RTC_FORMAT_BIN);
```
以上代码片段展示了如何正确地将 STM32G030C8T6 上的 RTC 单元切换到由 LSI 提供的时间基准支持下运行。
阅读全文
相关推荐


















