通过RTC实现STM32的日历读取、设置和输出

本文介绍了STM32实时时钟RTC的原理及应用。通过STM32CubeMX配置项目,利用HAL库函数获取时间日期,并用printf函数输出。实验展示了如何读取STM32的RTC时间,并显示当前日期、时间及星期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、RTC的原理

实时时钟是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。
RTC模块和时钟配置系统(RCC_BDCR寄存器)处于后备区域,即在系统复位或从待机模式唤醒后,RTC的设置和时间维持不变。

二、创建项目

1、新建项目

打开STM32CubeMX
在这里插入图片描述

2、选择芯片

在这里插入图片描述

3、设置RCC

在这里插入图片描述

4、设置串口Usart1

在这里插入图片描述

5、配置RTC

在这里插入图片描述

6、配置时钟

在这里插入图片描述

7、project管理

在这里插入图片描述
在这里插入图片描述

三、keil编写代码

1、输出初始时间

1、在main.c中定义时间和日期的结构体用来获取时间和日期

RTC_DateTypeDef GetData;  //获取日期结构体
RTC_TimeTypeDef GetTime;   //获取时间结构体

在这里插入图片描述
2、在main函数的while循环中添加以下代码

/* Get the RTC current Time */
	    HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);
      /* Get the RTC current Date */
      HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);

      /* Display date Format : yy/mm/dd */
      printf("%02d/%02d/%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date);
      /* Display time Format : hh:mm:ss */
      printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds);

      printf("\r\n");

      HAL_Delay(1000);

3、在main.c文件中重写fputc函数,完成printf函数的重定向

//添加头文件#include "stdio.h"
int fputc(int ch,FILE *f){
 uint8_t temp[1]={ch};
 HAL_UART_Transmit(&huart1,temp,1,2);
 return ch;
}

在这里插入图片描述
注意,如果重写了printf,build前一定要勾选Use MiscroLiB
在这里插入图片描述
结果:RTC初始时间
在这里插入图片描述
因为我们的输出年份加上了2000:

 printf("%02d/%02d/%02d\r\n",2000 + GetData.Year, GetData.Month, GetData.Date)

可知道RTC默认初始时间是0年1月1日零时零分零秒。

2、输出现在的时间并加上星期几

1、在rtc.c中修改为当前时间
在这里插入图片描述
2、添加如下代码:

/* Display date Format : weekday */
		if(GetData.WeekDay==1){
			printf("星期一\r\n");
		}else if(GetData.WeekDay==2){
			printf("星期二\r\n");
		}else if(GetData.WeekDay==3){
			printf("星期三\r\n");
		}else if(GetData.WeekDay==4){
			printf("星期四\r\n");
		}else if(GetData.WeekDay==5){
			printf("星期五\r\n");
		}else if(GetData.WeekDay==6){
			printf("星期六\r\n");
		}else if(GetData.WeekDay==7){
			printf("星期日\r\n");
		}

在这里插入图片描述
结果:现在的时间
在这里插入图片描述

四、总结

通过此次实验,我了解了实时时钟RTC的原理。并且知道了如何去实现STM32的日历读取、设置和输出。通过调用HAL库函数,获取时间日期,用printf函数输出。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值