[蓝桥杯嵌入式有手就行]12_RTC

[蓝桥杯嵌入式有手就行]系列文章

第一章 开发环境的配置
第二章 从点灯开始
第三章 学会看手册
第四章 GPIO(上)
第五章 GPIO(下)
第六章 LCD
第七章 串口
第八章 I2C
第九章 ADC
第十章 TIM(上)
第十一章 TIM(下)
第十二章 RTC
第十三章 14届模拟题1
第十四章 14届模拟题2
第十五章 14届真题解析
未完待续…



前言

注:本系列基于2023年蓝桥杯实战情况就行编写,所有软件均采用2023年赛点资源包
RTC比较简单,印象中考过一次,只需要记住日历是精确到秒的就行了。


一、内部结构

1、框图

在这里插入图片描述

二、RTC寄存器分析

1、RTC_TR(时间寄存器)

注意:要使用BCD码
为了保护RTC不受复位影响,其只能在初始化模式下执行写操作,换句话说,就是程序运行的时候不能写入。实际上系统会生成一个密钥,当密钥错误的时候启用写保护,我们也不是不能更改寄存器内的数据,就是麻烦而且没必要。具体可以看参考手册35.3.8节。
在这里插入图片描述
在这里插入图片描述

2、RTC_DR(日期寄存器)

RTC_DR寄存器也和上面一样,具有写保护。我们也是对着寄存器表格填就完事。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、RTC_SSR(辅助更新日历寄存器)

RTC_SSR本质上是一个递减计数器:辅助更新日历。也可以理解为亚秒,即秒的小数部分,其计算公式为:
Second fraction = (PREDIV_S - SS) / (PREDIV_S + 1)
在这里插入图片描述

三、代码示例

1、配置过程

红色字体的视实际情况选择

  1. 使能PWR和BKP时钟
  2. 使能后备寄存器访问
  3. 配置RTC时钟源
  4. 设置RTC预分频系数
  5. 设置时间
  6. 使能RTC时钟
  7. 开启相关中断(如闹钟)
  8. 开启中断服务函数

2、cubemx配置

1、时钟配置

按理说,电源电压波动会影响HSE和LSI时钟的准确性,但是,很可惜,板子上没有LSE(一般就是32.768kHZ的晶振) 。
因此,这里我们采用24M的HSE分频获得750khz时钟源。
在这里插入图片描述
在这里插入图片描述

2、RTC配置

在这里插入图片描述

3、上代码

定义如下两个变量,用于储存读出的时间

RTC_TimeDef H_M_S_Time
RTC_DateDef Y_M_D_Date

当我们需要读取时间的时候,调用下面两个函数必须同时使用

HAL_RTC_GetTime(&hrtc,&H_M_S_Time,RTC_Format_Bin);
HAL_RTC_GetDate(&hrtc,&Y_M_D_Date,RTC_Format_Bin);

四、问题

1、串口打印输出

由于其在寄存器中使用的是BCD码,因此我们需要转换
bin:

printf("time :%02d",(unsigned int)Y_M_D_Date.Year);//打印年份

BCD码:

printf("time :%02d",(unsigned int)((Y_M_D_Date.Year>>4)+(Y_M_D_Date.Year&0x0f)));

总结

RTC一般只需要掌握时间的设置和读取就可以了,应该是显示在LCD屏幕上,最多加个串口打印。当然理论上也是可以搞个记录开机历史时间的(每次复位,读取时间写入eeprom)。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

工具人呵呵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值