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

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记13:RTC实时时钟

系列文章目录

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记01:赛事介绍与硬件平台

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记02:开发环境安装

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记03:G4时钟结构

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记04:从零开始创建工程模板并开始点灯

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记05:Systick滴答定时器

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记06:按键输入

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记07:ADC模数转换

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记08:LCD液晶屏

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记09:EEPROM

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记10:USART串口通讯

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记11:数字电位器MCP4017

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记12:DAC数模转换

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记13:RTC实时时钟

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记14:PWM捕获

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记15:PWM输出

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记16:蓝桥杯编程手册


目录

系列文章目录

前言

一、基础知识

二、程序设计

1.CubeMX初始化

2.程序设计


前言

RTC是集成在STM32G4内部的一个模块,我们通过对寄存器的一些配置和读取就可以让他工作在实时时钟的计时模式。

一、基础知识

G4的实时时钟是一个独立的BCD码定时器和计数器,所谓的BCD码就是用一个二进制数来表示十进制数,比如0x59就对应59,也就是十六进制和十进制数的数字是一样的,它的内部有一个编码。可以提供时间(日期、年等)信息以及可编程的两个闹钟(Alarm)的中断。

只要外部电压还在供电,RTC就不会停止计数,计时在中断中或是复位状态。

它还可以自动校正闰年。也有自校准功能可以校准时钟。也可以设置为12小时制或者24小时制。年月日时分秒都用BCD码编码放在各自的寄存器

二、程序设计

1.CubeMX初始化

在CubeMX中启动RTC的时钟、日历功能。在Timers里面找到RTC,勾选Activate Clock Source和Activate Calendar。闹钟这里就不用了。

然后我们配置一下Configuration。第一个是时钟格式,可以配置成24小时制或12小时制。然后下面是两个分频(分频两次得到我们要的频率)。

我们把RTC的时钟配置成1Hz,这样的话就一秒钟走一次。因为RTC的时钟来源默认是LSI,也就是32KHz,所以我们把第一个分频设置成31,第二个分频配置成999,这样就把32KHz分频成1Hz了。(不能是32和1000,因为是从0开始的。)

后面的时、分、秒就设置成23、59、59就可以了。

在下面是一个夏令时的设置(夏天时间往前拨一个小时),我们这里就不用了,因为中国不用夏令时。

再下面就是配置一下当前的年月日周,我们按照自己想法配置就可以了。

然后我们生成工程就好了。

2.程序设计

我们看到rtc.c已经自动给我们生成好了,并且已经自动帮我们初始化好了,然后我们就可以调用HAL_RTC_GetTimeHAL_RTC_GetDate获取时间和日期了。

HAL_RTC_GetTime有三个变量,第一个是结构体变量,我们直接用&hrtc就好了,第二个是返回的时间的结构体,这个在rtc.c中就有,找到RTC初始化定义void MX_RTC_Init(void),下面第一个就是定义了一个sTime,我们模仿他的格式写成RTC_TimeTypeDef rtc_time;就是我们要用的了。

然后我们把结构体作为参数,&rtc_time,第三个参数是形式,我们用RTC_FORMAT_BIN。

//RTC
RTC_TimeTypeDef rtc_time;
void RTC_Process()
{HAL_RTC_GetTime(&hrtc,&rtc_time,RTC_FORMAT_BIN);
}

这样就可以把时、分、秒返回到rtc_time这个结构体里面了。

然后我们把RTC_Process()在主循环里面调用就可以。我们可以把它显示在LCD上面。

RTC_TimeTypeDef rtc_time;
void RTC_Process()
{HAL_RTC_GetTime(&hrtc,&rtc_time,RTC_FORMAT_BIN);
}
u8 buf[20];
void LCD_Process()
{LCD_SetBackColor(Black);LCD_SetTextColor(White);sprintf((char*)buf,"   %2d,%2d,%2d",rtc_time.Hours,rtc_time.Minutes,rtc_time.Seconds);LCD_DisplayStringLine(Line1,buf);
}

注意这里的时、分、秒的变量分别是rtc_time.Hours、rtc_time.Minutes、rtc_time.Seconds。前面是我们定义的结构体,然后加个点号,后面的就自动出来了。

日期同理:

RTC_TimeTypeDef rtc_time;
RTC_DateTypeDef rtc_date;
void RTC_Process()
{HAL_RTC_GetTime(&hrtc,&rtc_time,RTC_FORMAT_BIN);HAL_RTC_GetDate(&hrtc,&rtc_date,RTC_FORMAT_BIN);
}
http://www.lryc.cn/news/339382.html

相关文章:

  • 统一用安卓Studio修改项目包名
  • Spring Cloud Gateway详细介绍以及实现动态路由
  • transformer上手(6)—— 微调预训练模型
  • web前端框架设计第四课-条件判断与列表渲染
  • 计算机网络:数据链路层 - CSMA/CD协议
  • 力扣LeetCode138. 复制带随机指针的链表 两种解法(C语言实现)
  • 强大的压缩和解压缩工具 Keka for Mac
  • 论文速读:Do Generated Data Always Help Contrastive Learning?
  • 华为欧拉系统(openEuler-22.03)安装深信服EasyConnect软件(图文详解)
  • git commit --amend用法
  • 分布式系统:缓存与数据库一致性问题
  • JavaEE企业开发新技术5
  • mysql dump导出导入数据
  • 刷题记录3
  • Decorator 装饰
  • SpringMVC:搭建第一个web项目并配置视图解析器
  • 一文了解HTTPS的加密原理
  • Ubuntu系统空间整理
  • PHP Storm 2024.1使用
  • 王东岳-知鱼之乐【边读边记】1
  • 迁移docker部署的GitLab
  • 今年消费新潮流:零元购商业模式
  • Go导入私有仓库
  • GIS GeoJSON数据获取
  • 书生·浦语大模型实战营 | 第3次学习笔记
  • easyExcel - 按模板导出
  • 使用 Tranformer 进行概率时间序列预测实战
  • LLM大语言模型助力DataEase小助手,新增气泡地图,DataEase开源数据可视化分析平台v2.5.0发布
  • 维修伊顿触摸屏不显示工业电脑人机界面EATON XVS-430-10MPI-1-10 深圳捷达工控维修
  • 趣话最大割问题:花果山之群猴博弈