当前位置: 首页 > news >正文

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

 

 

二、使用步骤

dfcee18f788443e48fad3adf37ff87f5.png

69afdab7b0504fc0a1dea524e1dd2ad9.png

 

 

三、代码

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

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

 

 

相关文章:

  • 谁懂啊!ITIL认证的五大好处
  • 使用 C++ 实现卷积运算:从理论到实践的详细指南
  • 加密解密的艺术:探索Java中的DES算法
  • 关于BSV区块链覆盖网络的常见问题解答(上篇)
  • 为VRoidStudio制作的vrm格式模型制作blendshape
  • 【Linux实践】实验五:用户和组群账户管理
  • [极客大挑战 2019]RCE ME1
  • 计算机毕业设计 Java教务管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • React返回上一个页面,会重新挂载吗
  • 微信小程序-数据模型与动态赋值
  • 【AI驱动TDSQL-C Serverless数据库技术实战】 AI电商数据分析系统——探索Text2SQL下AI驱动代码进行实际业务
  • 智能网联汽车飞速发展,安全危机竟如影随形,如何破局?
  • ONVIF、GB28181技术特点和使用场景分析
  • 【教程】57帧! Mac电脑流畅运行黑神话悟空
  • docker的harbor仓库登录问题
  • [数据结构]链表的实现在PHP中
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • 03Go 类型总结
  • Android优雅地处理按钮重复点击
  • Docker入门(二) - Dockerfile
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • Java,console输出实时的转向GUI textbox
  • Java教程_软件开发基础
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • Joomla 2.x, 3.x useful code cheatsheet
  • vagrant 添加本地 box 安装 laravel homestead
  • Vim 折腾记
  • WinRAR存在严重的安全漏洞影响5亿用户
  • ------- 计算机网络基础
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端相关框架总和
  • 使用API自动生成工具优化前端工作流
  • 学习ES6 变量的解构赋值
  • 学习使用ExpressJS 4.0中的新Router
  • 原生js练习题---第五课
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #window11设置系统变量#
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (8)STL算法之替换
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (算法)区间调度问题
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (一)Neo4j下载安装以及初次使用
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)LINQ之路
  • (转)mysql使用Navicat 导出和导入数据库
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .Net - 类的介绍
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET3.5下用Lambda简化跨线程访问窗体控件,避免繁复的delegate,Invoke(转)