一、RTC时钟配置
1.时钟树的配置
选择HSE_RTC,记住750khz,后面要用
配置RTC Timers->RTC
前三项和我一样配置就可以了,其他的都不用变
RTC时钟频率=RTC时钟源/(Asynchronous Predivider value+1)/(Synchronous Predivider value+1)=750K/(125-1+1)/(6000-1+1)=1Hz,也就是1秒
小时,分钟,秒和题目要求一样就行,这里自行改变
下面的Calendar Date 不用变,因为我们只设置秒中断,和日期无关
闹钟这里配置时间就设定在初始时间的下一秒即可
我们只关心时间,这里这样配置就可以了
最后一步,打开NVIC配置就行,开启中断(打个勾就行)
二、代码
RTC_TimeTypeDef now_time;
RTC_DateTypeDef now_date;
定义两个结构体
1.获取时间函数
void RTC_Usergetvalue(void)
{
HAL_RTC_GetTime(&hrtc,&now_time,RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc,&now_date,RTC_FORMAT_BIN);
}
这里记得一定要按这个顺序写函数、
2.配置闹钟函数
将RTC_AlarmTypeDef sAlarm = {0};这一句删除,并且如果之后用cubemax配置后也要再次删除
并在上面将这句话定义为全局变量
最后在主函数里有extern引用一下即可
void RTC_Usersettime(void)
{
sAlarm.AlarmTime.Seconds=now_time.Seconds+1;
if(sAlarm.AlarmTime.Seconds==60) sAlarm.AlarmTime.Seconds=0;
HAL_RTC_SetAlarm_IT(&hrtc,&sAlarm,RTC_FORMAT_BIN);
}
这是设置闹钟的函数
然后最后还剩一个中断函数配置
void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
char text[30];
RTC_Usergetvalue();
sprintf(text," T:%02d-%02d-%02d",now_time.Hours,now_time.Minutes,now_time.Seconds);
LCD_DisplayStringLine(Line5, (uint8_t *)text);
RTC_Usersettime();
}
这个中断函数可以在h文件中找到
在里面引用前面说过的两个函数即可,并且可以像我这样显示在LCD屏幕上