蓝桥杯嵌入式(G4系列):RTC时钟

这篇具有很好参考价值的文章主要介绍了蓝桥杯嵌入式(G4系列):RTC时钟。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

 

        关于RTC时钟的HAL库配置我也是第一次,之前都是用库函数的写法,这里写下这篇博客来记录一下自己的学习过程。

STM32Cubemx配置:

        首先点击左侧的Timers的RTC,勾选以下选项

蓝桥杯嵌入式(G4系列):RTC时钟

        进入时钟树配置

蓝桥杯嵌入式(G4系列):RTC时钟

         进入时间设置,这里我把时间设置为了2023年3月12日20点20分,但是我圈出来的地方一定要注意,125✖6000刚好是750Mhz,一秒发生一次中断

蓝桥杯嵌入式(G4系列):RTC时钟

         到此为止,我们的STM32Cubemx配置就算是结束了,直接点击生成代码,接下来就是写代码了。

代码部分:

        这里有几点需要给大家强调一下,获取RTC时间或者日期时,必须先获取时间,再获取日期,顺序不能颠倒(会获取失败),而且时间和日期调用的时候不能单独调用,必须两个同时调用,否则出错,这是我实践得出的结果,即使我也不是太懂为啥。

RTC_TimeTypeDef sTime;				
RTC_DateTypeDef sDate;


while (1)
  {
	 HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
	 HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN);
 
	 sprintf((char *)LCD_dispaly,"%02d:%02d:%02d--%02d:%02d:%02d",sDate.Year,sDate.Month,sDate.Date,sTime.Hours,sTime.Minutes,sTime.Seconds);
	 LCD_DisplayStringLine(Line9,LCD_dispaly);	
  }

额外功能:

        暂停功能,起始暂停功能我一开始是没有想起来的,后来才想到,把RTC给关了,那不就暂停了吗

__HAL_RCC_RTC_DISABLE();

        恢复计时功能:

__HAL_RCC_RTC_ENABLE();

最终实现效果:

        蓝桥杯嵌入式(G4系列):RTC时钟

设定闹钟:

        RTC 时钟其中一大功能就是闹钟中断,我们在SM32Cubemx中进行如下配置蓝桥杯嵌入式(G4系列):RTC时钟

         将闹钟触发的时间设置为20:20:3,也就是初始时间的3秒后蓝桥杯嵌入式(G4系列):RTC时钟

        这里我们一定要注意一下,我相当于使用了秒中断,一定要把前三个给使能了,这三个选项是匹配日期,指的是所设闹钟需检测年月份日期,我们只用秒中断,所以只用这样配置就OK了

         然后我们使能中断

蓝桥杯嵌入式(G4系列):RTC时钟

代码部分:

        这里设置闹钟的话就需要对代码进行封装了

        我们需要重新写一个GET_Time()函数,还有一个SET_Alarm()函数,同时要需要重新写一下RTC中断的回调函数

        这里一开始我是不打算去写GET_Time()函数的,我决定直接用前面提到的两个函数不就可以了吗,结果报了两个警告,保险起见,我还是把这两个函数封装一下:

蓝桥杯嵌入式(G4系列):RTC时钟

         GET_Time():

void GET_Time(void)
{
	HAL_RTC_GetTime(&hrtc, &sTime, RTC_FORMAT_BIN);
	HAL_RTC_GetDate(&hrtc, &sDate, RTC_FORMAT_BIN);
}

        SET_Alarm(),这个函数其实是我复制了MX_RTC_Init()里面的内容,然后更改一下就可以了,让每次中断的时候读取当前秒数,读取到的秒数再加上1就是下一次中断的触发时间。

RTC_AlarmTypeDef sAlarm;

void SET_alarm(void)
{
  sAlarm.AlarmTime.Hours = 0x22;
  sAlarm.AlarmTime.Minutes = 0x0;
  sAlarm.AlarmTime.Seconds = sTime.Seconds+1;
  sAlarm.AlarmTime.SubSeconds = 0x0;
  sAlarm.AlarmMask = RTC_ALARMMASK_DATEWEEKDAY|RTC_ALARMMASK_HOURS
                              |RTC_ALARMMASK_MINUTES;
  sAlarm.AlarmSubSecondMask = RTC_ALARMSUBSECONDMASK_ALL;
  sAlarm.AlarmDateWeekDaySel = RTC_ALARMDATEWEEKDAYSEL_DATE;
  sAlarm.AlarmDateWeekDay = 0x1;
  sAlarm.Alarm = RTC_ALARM_A;
  if(sAlarm.AlarmTime.Seconds==60)sAlarm.AlarmTime.Seconds=0;
  HAL_RTC_SetAlarm_IT(&hrtc, &sAlarm, RTC_FORMAT_BIN);//这里要注意,我们选择的是十进制
}

 蓝桥杯嵌入式(G4系列):RTC时钟

         之后,我们在RTC的回调函数中书写服务函数

void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
{
	GET_Time();
	SET_Alarm();
	sprintf(string,"%02d:%02d:%02d\n",sTime.Hours,sTime.Minutes,sTime.Seconds);
	HAL_UART_Transmit(&huart1,(unsigned char *)string,strlen(string),50);
}

闹钟的效果实现:

        每一秒向串口助手发送当前时间

蓝桥杯嵌入式(G4系列):RTC时钟文章来源地址https://www.toymoban.com/news/detail-414459.html

到了这里,关于蓝桥杯嵌入式(G4系列):RTC时钟的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式——RTC闹钟Alarm

    配置RTC时钟 设置RTC闹钟 配置RTC闹钟中断 实现中断函数 RTC闹钟初始化 中断函数

    2024年02月03日
    浏览(27)
  • 嵌入式系统中如何选择RTC电池?

      RTC(Real Time Clock)是一种用于提供系统时间的独立定时器,它可以在系统断电或低功耗模式下继续运行,只需要一个后备电池作为供电源。在嵌入式系统中,选择合适的RTC电池时非常关键的,它会影响系统时间的准确性和稳定性。 在选择嵌入式系统中的RTC电池时,需要考虑

    2024年02月12日
    浏览(40)
  • 正点原子嵌入式linux驱动开发——外置RTC芯片PCF8563

    上一章学习了STM32MP1内置RTC外设 ,了解了Linux系统下RTC驱动框架。一般的应用场合使用SOC内置的RTC就可以了,而且成本也低,但是 在一些对于时间精度要求比较高的场合,SOC内置的RTC就不适用了 。这个时候需要根据自己的应用要求选择合适的外置RTC芯片, 正点原子STM32MP1开发

    2024年02月06日
    浏览(37)
  • 嵌入式课程设计-- 电子时钟

    开发环境: Proteus:是比较好的仿真单片机及外围器件的工具。 keil5:嵌入式开发的软件。 原理图和PCB 图 : 原理图: 功能和操作说明: 本系统以C51单片机为核心,通过软件在LCD1602上显示具体时间日期的系统。本质是一个简易电子时钟。同时可以通过4个按键来调整时间。 在

    2024年02月11日
    浏览(45)
  • 【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式省赛客观题以及详细题解

    题解:   概念题。 MCO引脚,是单片机对外提供时钟的引脚。 HSE,高速外部时钟信号,时钟源由外部晶体/陶瓷谐振器与外部时钟; HSI,高速的内部时钟,由内部8MHz的RC振荡器产生,可直接作为系统时钟或在2分频后作为PLL输入; SYSCLK,是系统时钟; HSE/2,对高速外部时钟进

    2023年04月16日
    浏览(48)
  • 嵌入式学习---ARM时钟体系

    按 一定电压幅度 , 一定时间间隔 连续发出的脉冲信号。它是一个周期性的信号,每个周期内包含一个上升沿和一个下降沿。时钟脉冲的上升沿和下降沿通常用于触发和同步各个电子元件的操作,例如CPU的指令执行、数据传输、寄存器更新等。 时钟频率是指时钟脉冲的频率

    2024年01月16日
    浏览(51)
  • 【蓝桥杯嵌入式】第十二届蓝桥杯嵌入式省赛客观题及详细题解

    解析: 波特率,指 每秒钟传输码元符号的个数,对符号传输速率的一种度量,单位为1baud/s 。 由于串口只有高低电平之分,即1码元等于1bit,即波特单位1baud和1bit等效,因此,此时的波特单位可以是位/秒。 答案: B 解析: 放大电路的开环,是指未经反馈通路形成的独立放大电

    2023年04月17日
    浏览(63)
  • 【蓝桥杯嵌入式】第十三届蓝桥杯嵌入式国赛程序设计试题以及详细题解

      本届国赛试题主要包含 LCD 、 LED 、 按键 、 EEPROM 、 串口 、 模拟电压输入 、 脉冲输入输出 七大部分,其中前面三个部分是蓝桥杯嵌入式的“亲儿子”(必考部分),而剩下的四个部分都为“干儿子”(考频相对较高)。   相对于本届省赛两套试题:   本套试题 串口数

    2024年02月02日
    浏览(60)
  • 【蓝桥杯嵌入式】第十四届蓝桥杯嵌入式[模拟赛2]客观题及详细题解

    解析 USART_CR1:控制寄存器1,其中的M位定义了数据字的长度,由软件对其设置和清零。 USART_CR2:控制寄存器2。 USART_BRR:波特率寄存器。 USART_DR:数据寄存器。 (如果现场不记得,可以查阅芯片手册) 答案: A 解析 在STM32微控制器中,DMA可编程的数据传送数目:最大为65535。(如果现场不

    2023年04月10日
    浏览(49)
  • 【蓝桥杯嵌入式】蓝桥杯嵌入式第十四届省赛程序真题,真题分析与代码讲解

     🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都已更新完毕,欢迎大家前往订阅本专题🎏 🎏【蓝桥杯嵌入式】蓝桥杯第十届省赛真题 🎏【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题 🎏【蓝桥杯嵌入式】蓝桥杯第十三届省

    2023年04月15日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包