嵌入式|蓝桥杯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_GetTime和HAL_RTC_GetDate获取时间和日期了。

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

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

cpp 复制代码
//RTC
RTC_TimeTypeDef rtc_time;
void RTC_Process()
{
	HAL_RTC_GetTime(&hrtc,&rtc_time,RTC_FORMAT_BIN);
}

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

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

cpp 复制代码
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。前面是我们定义的结构体,然后加个点号,后面的就自动出来了。

日期同理:

cpp 复制代码
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);
}
相关推荐
努力小周3 小时前
STM32智能安防系统
c语言·stm32·单片机·嵌入式硬件·物联网·计算机网络·pcb工艺
袁小皮皮不皮4 小时前
1.HCIP BFD 学习笔记(优化版)
服务器·网络·笔记·网络协议·学习·智能路由器·ip
装不满的克莱因瓶4 小时前
【自动驾驶领域】学习 Cityscapes 数据集——城市街景语义理解的标准基准
人工智能·pytorch·python·深度学习·学习·机器学习·自动驾驶
清辞8535 小时前
产品经理需求推进流程
大数据·深度学习·学习·产品经理
华科大胡子5 小时前
在STM32上跑通TinyML
stm32·单片机·嵌入式硬件
YM52e5 小时前
鸿蒙PC ArkTS 声明合并问题深度解析与最佳实践
学习·华为·harmonyos·鸿蒙·鸿蒙系统
海兰6 小时前
【实用程序】电商销售分析仪表盘 — 从零搭建一个AI参与的全栈数据洞察系统
人工智能·学习·算法
iCxhust6 小时前
C#进程管理程序
开发语言·汇编·stm32·单片机·c#·微机原理
ken22327 小时前
在 Libreoffice Calc中输入自定义表情字符时,需要保存之后,才能正常显示
学习
zwenqiyu7 小时前
P5283 [十二省联考 2019] 异或粽子题解
c++·学习·算法