凡亿教育-媛媛
凡事用心,一起进步
打开APP
公司名片
凡亿专栏 | ​STM32单片机的RTC配置过程(附代码)
​STM32单片机的RTC配置过程(附代码)

在STM32单片机里,实时时钟(Real-time clock: RTC)是一个独立的计时器。RTC提供一组连续运行的计数器,可以与合适的软件一起使用,以提供时钟日历功能。可以写入计数器值以设置系统的当前时间/日期。

image.png

1、时钟源配置

// 使能电源时钟和备份域访问

__HAL_RCC_PWR_CLK_ENABLE();

HAL_PWR_EnableBkUpAccess();


// 选择时钟源(LSE/LSI)

RCC_OscInitTypeDef RCC_OscInit = {0};

RCC_OscInit.OscillatorType = RCC_OSCILLATORTYPE_LSE;

RCC_OscInit.LSEState = RCC_LSE_ON;

HAL_RCC_OscConfig(&RCC_OscInit);


// 配置RTC时钟

RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC;

PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;

HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit);

2、RTC初始化

// 使能RTC时钟

__HAL_RCC_RTC_ENABLE();


// 初始化结构体配置

RTC_TimeTypeDef sTime = {0};

RTC_DateTypeDef sDate = {0};


hrtc.Instance = RTC;

hrtc.Init.HourFormat = RTC_HOURFORMAT_24;  // 24小时制

hrtc.Init.AsynchPrediv = 127;             // 异步预分频(LSE 32.768kHz时)

hrtc.Init.SynchPrediv = 255;              // 同步预分频

hrtc.Init.OutPut = RTC_OUTPUT_DISABLE;    // 输出关闭

HAL_RTC_Init(&hrtc);

3、时间日期设置

// 设置时间

sTime.Hours = 12;

sTime.Minutes = 30;

sTime.Seconds = 0;

sTime.SubSeconds = 0;

sTime.TimeFormat = RTC_HOURFORMAT12_AM;

HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN);


// 设置日期

sDate.WeekDay = RTC_WEEKDAY_MONDAY;

sDate.Month = RTC_MONTH_JANUARY;

sDate.Date = 1;

sDate.Year = 23;  // 2023年

HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN);

4、闹钟配置(可选)

// 使能RTC全局中断

HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 0, 0);

HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);


// 中断服务函数

void RTC_Alarm_IRQHandler(void)

{

    HAL_RTC_AlarmIRQHandler(&hrtc);

    // 用户处理代码

}

5、中断配置

// 使能RTC全局中断

HAL_NVIC_SetPriority(RTC_Alarm_IRQn, 0, 0);

HAL_NVIC_EnableIRQ(RTC_Alarm_IRQn);


// 中断服务函数

void RTC_Alarm_IRQHandler(void)

{

    HAL_RTC_AlarmIRQHandler(&hrtc);

    // 用户处理代码

}

6、关键参数说明

①预分频计算

检查晶振负载电容(通常6pF)

确保LSE使能配置正确

使用示波器测量PC14/PC15引脚

②备份域注意事项

检查预分频配置是否正确

确认后备电池(VBAT)供电正常

检查RTC寄存器写保护状态

③低功耗模式

// 进入Stop模式时保持RTC运行
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);


本文凡亿教育原创文章,转载请注明来源!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论