STM32G070使用低速外部时钟配置RTC
时间: 2024-12-14 20:11:53 浏览: 16
在STM32G070微控制器上使用低速外部时钟(LSE)配置实时时钟(RTC)的步骤如下:
1. **配置时钟源**:
- 确保外部低速时钟源(如32.768 kHz晶振)已经连接到STM32G070的RTC引脚。
- 在系统启动时,确保LSE已经稳定。
2. **启用电源接口和备份域访问**:
- 在代码中启用电源接口和备份域访问,以便配置RTC。
3. **配置RTC时钟源**:
- 使用HAL库函数或直接操作寄存器来选择LSE作为RTC的时钟源。
4. **初始化RTC**:
- 配置RTC的预分频器和其他参数,以满足应用需求。
以下是一个示例代码,演示如何配置STM32G070的RTC使用LSE:
```c
#include "stm32g0xx_hal.h"
void RTC_Init(void)
{
RTC_HandleTypeDef hrtc;
// 启用电源接口和备份域访问
__HAL_RCC_PWR_CLK_ENABLE();
HAL_PWR_EnableBkUpAccess();
// 启用LSE
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
// 初始化错误处理
while (1);
}
// 选择LSE作为RTC时钟源
__HAL_RCC_RTC_CONFIG(RCC_RTCCLKSOURCE_LSE);
// 启用RTC时钟
__HAL_RCC_RTC_ENABLE();
// 配置RTC参数
hrtc.Instance = RTC;
hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
hrtc.Init.AsynchPrediv = 127;
hrtc.Init.SynchPrediv = 255;
hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;
hrtc.Init.OutPutPolarity = RTC_OUTPUT_POLARITY_HIGH;
hrtc.Init.OutPutType = RTC_OUTPUT_TYPE_OPENDRAIN;
if (HAL_RTC_Init(&hrtc) != HAL_OK)
{
// 初始化错误处理
while (1);
}
}
int main(void)
{
HAL_Init();
RTC_Init();
RTC_TimeTypeDef sTime = {0};
RTC_DateTypeDef sDate = {0};
// 设置时间
sTime.Hours = 12;
sTime.Minutes = 30;
sTime.Seconds = 0;
sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
sTime.StoreOperation = RTC_STOREOPERATION_RESET;
HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
// 设置日期
sDate.WeekDay = RTC_WEEKDAY_MONDAY;
sDate.Month = RTC_MONTH_JANUARY;
sDate.Date = 1;
sDate.Year = 21;
HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN);
while (1)
{
// 主循环
}
}
```
阅读全文