蓝桥杯嵌入式RTC时钟配置

一、RTC时钟配置

1.时钟树的配置

e96488b8767f4f7092372eec68da489b.png

 选择HSE_RTC,记住750khz,后面要用

配置RTC  Timers->RTC

6664cd4a9c64479e802c1ab8e0042393.png

前三项和我一样配置就可以了,其他的都不用变

RTC时钟频率=RTC时钟源/(Asynchronous Predivider value+1)/(Synchronous Predivider value+1)=750K/(125-1+1)/(6000-1+1)=1Hz,也就是1秒

a6dd163a357f47f0a98b8980511f6bb2.png

 小时,分钟,秒和题目要求一样就行,这里自行改变

下面的Calendar Date 不用变,因为我们只设置秒中断,和日期无关

f017fee8d33b46dba74817736ac32da8.png

闹钟这里配置时间就设定在初始时间的下一秒即可 

44c5dab4580a49df9d610cf83e5394fc.png

 我们只关心时间,这里这样配置就可以了

最后一步,打开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.配置闹钟函数

467431ada8e2412d80ff1df86528aff5.png 

将RTC_AlarmTypeDef sAlarm = {0};这一句删除,并且如果之后用cubemax配置后也要再次删除

并在上面将这句话定义为全局变量

cd1fce1cde5149d598ccd15a951d9c3d.png

最后在主函数里有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屏幕上

 

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值