【STM32F4】HAL库 CubeMX(十三)--------RTC实时时钟实验


前言

前面我们说了OLED实验,是一个比较好的显示测试代码的方法。现在我们学习关于RTC实时时钟的相关配置。

一、RTC是什么?

STM32F4 的实时时钟(RTC)相对于 STM32F1 来说,改进了不少,带了日历功能了,STM32F4 的 RTC,是一个独立的 BCD 定时器/计数器。RTC 提供一个日历时钟(包含年月日时分秒信息)、两个可编程闹钟(ALARM A 和 ALARM B)中断,以及一个具有中断功能的周期性可编程唤醒标志。RTC 还包含用于管理低功耗模 式的自动唤醒单元。
两个 32 位寄存器(TR 和 DR)包含二进码十进数格式 (BCD) 的秒、分钟、小时(12 或24 小时制)、星期、日期、月份和年份。此外,还可提供二进制格式的亚秒值。
STM32F4 的 RTC 可以自动将月份的天数补偿为 28、29(闰年)、30 和 31 天。并且还可以进行夏令时补偿。

二、RTC实时时钟实验

1.实验所需配置功能

1、RTC配置
2、采用LCD实时显示

2.功能配置

1、RTC时钟配置(只演示时钟,不演示闹钟和唤醒事件,可仿照原子代码编写)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、LCD显示配置请参考【STM32F4】HAL库 CubeMX(十二)--------LCD显示实验

3.时钟配置

RCC时钟配置如前文一样(此处一般情况是不变的)。
【STM32F4】HAL库 CubeMX(一)--------创建工程(点亮LED)

4.生成代码

1、添加LCD代码
在这里插入图片描述
2、定义变量
在这里插入图片描述

uint8_t t = 0;
uint8_t tbuf[40];
RTC_DateTypeDef RTC_DateStruct;
RTC_TimeTypeDef RTC_TimeStruct;

3、添加以下操作代码
在这里插入图片描述

  LCD_Init();
  POINT_COLOR=RED;
	LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");	
	LCD_ShowString(30,70,200,16,16,"RTC TEST");	
	LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
		t++;
		if((t%10)==0)
		{
            HAL_RTC_GetTime(&hrtc,&RTC_TimeStruct,RTC_FORMAT_BIN);
			sprintf((char*)tbuf,"Time:%02d:%02d:%02d",RTC_TimeStruct.Hours,RTC_TimeStruct.Minutes,RTC_TimeStruct.Seconds); 
			LCD_ShowString(30,140,210,16,16,tbuf);	
            HAL_RTC_GetDate(&hrtc,&RTC_DateStruct,RTC_FORMAT_BIN);
			sprintf((char*)tbuf,"Date:20%02d-%02d-%02d",RTC_DateStruct.Year,RTC_DateStruct.Month,RTC_DateStruct.Date); 
			LCD_ShowString(30,160,210,16,16,tbuf);	
			sprintf((char*)tbuf,"Week:%d",RTC_DateStruct.WeekDay); 
			LCD_ShowString(30,180,210,16,16,tbuf);
		} 
        HAL_Delay(10);

注意事项

在学习中遇到一点bug
1、读取时间之后必须读取日期,否则读不出来。
2、设置时间之后必须设置日期,否则也有问题。
望有大佬可以解答。

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值