2025年第16届蓝桥杯嵌入式竞赛学习笔记(十四):RTC实时时钟
1.功能实现
①设置时间和日期
②读取时间和日期
③设置一个闹钟
2.STM32CubeMX配置
打开Timers栏,点击RTC进入配置界面,将时钟源与日历使能,随后使能中断
点开参数配置,设置24小时计数法,Data Format选择二进制数据形式,下面三栏分别为小时、分钟、秒。分别设置为23、30、10
日历的配置同时钟的时分秒一样随意配置即可。
进行闹钟A的配置,时分秒设为23、30、20,将Alarm Mask Date Week day 使能(闹钟响起时不考虑日期),配置完成后生成代码
3.代码配置
首先开打CubeMX给配置的rtc.c文件,将第37、38行定义的两个结构体复制到使用处
RTC_TimeTypeDef sTime = {0};RTC_TimeTypeDef sDate = {0};
之后使用获取时间与日期函数
HAL_RTC_GetTime(&hrtc,&sTime,RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc,&sDate,RTC_FORMAT_BIN);
注意:即使不需要日期,也要将获取日期函数加上,不然时间不会流动
使用LCD屏查看
char Text[20];void LCD_Show(void)
{sprintf(Text,"%2d:%2d:%2d",sTime.Hours,sTime.Minutes,sTime.Seconds);LCD_DisplayStringLine(Line0,(uint8_t *)Text);sprintf(Text,"%d-%d-%d-%d",sDate.Year,sDate.Month,sDate.Date,sDate.WeekDay);LCD_DisplayStringLine(Line2,(uint8_t *)Text);
}
接下来写闹钟的中断
使用闹钟中断的回调函数
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{//闹钟中断要执行的代码放这里
}
当时间达到闹钟A设置的参数时,触发中断回调函数