蓝桥杯—STM32G431RBT6(RTC时钟获取时间和日期)

一、RTC是什么,有什么用?

在 STM32 中,RTC(Real-Time Clock,实时时钟)主要有以下作用:

  1. 时间保持:即使在系统断电情况下,也能持续记录时间。(需要纽扣电池供电)
  2. 提供时间基准:为系统提供准确的时间信息,便于各种时间相关的操作和任务。
  3. 事件记录:可用于记录特定事件发生的时间。
    主要包含日历、闹钟和自动唤醒这三部分的功能,其中的日历功能我们使用的最多。日历包含两个32bit的时间寄存器,可直接输出时分秒,星期、月、日、年。其中使用最多的是LSE,LSE由一个外部的32.768KHZ(6PF负载)的晶振提供,精度高,稳定,RTC首选。LSI是芯片内部的30KHZ晶体,精度较低,会有温漂,一般不建议使用。HSE_RTC由HSE分频得到,最高是750khz,使用的也较少。因为我们的竞赛板子上只有HSE和LSI,并未连接LSE,因此我们使用HSE_RTC

在 RTC(实时时钟)中:

同步分频是指分频操作与时钟信号同步进行。也就是说,分频器的工作节奏与时钟信号的节奏一致,数据的传输和处理在时钟的控制下进行,这种方式可以确保分频结果的准确性和稳定性。

异步分频则是指分频操作与时钟信号不同步。可能会存在一些相位偏差或不确定性,在某些情况下可能会对系统的性能或时间精度产生一定影响。

同步分频和异步分频主要有以下区别:

  1. 时钟关系:同步分频的输出时钟与输入时钟同步,而异步分频的输出时钟与输入时钟不同步。

  2. 相位关系:同步分频的输出相位与输入相位直接相关,而异步分频的输出相位可能存在不确定性。

  3. 精度:一般情况下,同步分频的精度更高,因为它受到输入时钟的直接控制;异步分频的精度可能会受到一些因素的影响。

  4. 稳定性 :同步分频相对更稳定,而异步分频在某些情况下可能会出现抖动或不稳定的情况。

    选择同步分频或异步分频通常需要考虑以下因素:

  5. 系统要求:如果对时间精度和稳定性有较高要求,通常会优先选择同步分频。

  6. 电路复杂性:异步分频可能相对简单,但同步分频可能需要更复杂的电路设计。

  7. 应用场景:根据具体的应用环境和需求来决定,比如一些对相位关系要求不严格的场景可能更适合异步分频。

二、使用步骤

三、代码

定义结构体(日期和时间)

复制代码
RTC_DateTypeDef rtc_date;
RTC_TimeTypeDef rtc_time;

在LCD函数中获取值

注意,两个都要获取一下,不然容易出毛病

  1. HAL_RTC_GetDate(&hrtc, &rtc_date, RTC_FORMAT_BIN);:通过调用HAL_RTC_GetDate函数,从指定的hrtc实时时钟获取日期信息,并将其存储到rtc_date结构体中。RTC_FORMAT_BIN表示以二进制格式获取日期。
  2. HAL_RTC_GetTime(&hrtc, &rtc_time, RTC_FORMAT_BIN);:同样地,通过调用HAL_RTC_GetTime函数,从指定的hrtc实时时钟获取时间信息,并将其存储到rtc_time结构体中。RTC_FORMAT_BIN表示以二进制格式获取时间。
复制代码
	HAL_RTC_GetDate(&hrtc,&rtc_date,RTC_FORMAT_BIN);
	HAL_RTC_GetTime(&hrtc,&rtc_time,RTC_FORMAT_BIN);

在LCD中显示

  1. sprintf(buf," Date:%02d-%02d-%02d", rtc_date.Year, rtc_date.Month, rtc_date.Date);:使用sprintf函数将日期信息按照指定的格式(年、月、日,均为两位数字)写入buf字符串中。
  2. LCD_DisplayStringLine(Line3, (uint8_t*)buf);:将包含日期信息的字符串显示在液晶屏的第 3 行。
  3. sprintf(buf," Time:%02d-%02d-%02d", rtc_time.Hours, rtc_time.Minutes, rtc_time.Seconds);:类似地,使用sprintf函数将时间信息按照指定的格式(时、分、秒,均为两位数字)写入buf字符串中。
  4. LCD_DisplayStringLine(Line4, (uint8_t*)buf);:将包含时间信息的字符串显示在液晶屏的第 4 行。
复制代码
sprintf(buf," Date:%02d-%02d-%02d",rtc_date.Year,rtc_date.Month,rtc_date.Date);//RTC时钟
	LCD_DisplayStringLine(Line3,(uint8_t*)buf);
		sprintf(buf," Time:%02d-%02d-%02d",rtc_time.Hours,rtc_time.Minutes,rtc_time.Seconds);
	LCD_DisplayStringLine(Line4,(uint8_t*)buf);

四、开源代码

通过网盘分享的文件:19-TEST9-RTC实时时钟.zip

链接: https://pan.baidu.com/s/150G8rln1ZEBG1QCZBqrMAQ?pwd=0820 提取码: 0820

相关推荐
西城微科方案开发30 分钟前
西城微科蓝牙电子秤PCBA方案设计
单片机·嵌入式硬件
luj_17689 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
hongmai66688810 小时前
FH8856V310芯片详解:6M高清+0.5TOPS算力,赋能智能安防新方案
人工智能·单片机·嵌入式硬件·物联网·智能家居
luj_176811 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
三易串口屏12 小时前
串口屏是什么
单片机·嵌入式硬件
冰茶丿15 小时前
嵌入式安全第一关:Secure Boot是怎么保护你的设备的?
嵌入式硬件·安全
jimy115 小时前
C语言模拟对象、方法:“函数指针+结构体“复用函数指针指向的函数体
c语言·开发语言
卖萌的斜阳15 小时前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
单片机·网络协议·tcp/ip
Kuakewei88816 小时前
4056充电芯片:28V高耐压+电池反接保护+热调节功能
嵌入式硬件
三品吉他手会点灯16 小时前
嵌入式机器学习 - 学习笔记1.1.1 - 什么是机器学习?
c语言·人工智能·笔记·嵌入式硬件·学习·机器学习