赞
踩
RTC 是实时时钟(Real-Time Clock)的缩写,它是一种计时器件,通常用于计算和保持时间的精确追踪。这种设备在多种电子系统中都非常重要,尤其是在需要精确时间保持的应用中,如计算机、服务器、通讯设备和嵌入式系统(如单片机)等。
RTC的主要特点和功能包括:
持续时间跟踪:即使在主系统断电或处于低功耗模式时,RTC仍然可以继续工作,因为它通常由一个小型的电池供电。
低功耗:RTC 设计用来消耗极少的电力,从而可以在没有外部电源供应的情况下长时间运行。
提供日期和时间信息:RTC能够提供年、月、日、小时、分钟和秒等信息。一些RTC还包括星期几的数据。
应用广泛:从电脑(用于保持系统时钟)到嵌入式系统(如微控制器项目),再到工业机器和通讯设备,RTC都是不可或缺的部分。
在许多微控制器和系统开发板(如STM32系列)中,RTC是一个内置的组件,通过专用的软件库(如HAL库)进行控制和管理。开发者可以通过编程设置时间、读取当前时间、配置闹钟等功能。
1.HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
设置RTC的时间。你需要提供一个指向RTC_TimeTypeDef结构的指针,该结构包含小时、分钟和秒等信息。Format参数指定时间的格式(例如,二进制或BCD)。
RTC_FORMAT_BIN:
二进制。
RTC_FORMAT_BCD:
BCD格式,二进制编码的十进制,是一种特殊的格式,其中每个十进制数字都单独编码为一个四位二进制数。
2.HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
设置RTC的日期。类似于设置时间,你需要提供一个指向RTC_DateTypeDef结构的指针,其中包含年、月、日等信息。
3.HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
获取当前的时间。
4.HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
获取当前的日期。注意,通常在调用HAL_RTC_GetTime之后调用此函数,以确保时间和日期的一致性。
对RTC的日历,闹钟功能进行使能
实现功能:单片机上显示的将是实时更新的时间和日期,格式为 “23:59:45” 和 “2022-15-11”(或者随着时间的推移,显示的时间会变化)。
1.在/* USER CODE BEGIN 0 /与/ USER CODE END 0 */之间增加如下代码
uint8_t ShowTime[16]="hh:ms:ss"; uint8_t ShowDate[16]="yyyy-dd-mum"; static void RTC_CalendarShow(uint8_t *showtime,uint8_t *showdate) { RTC_DateTypeDef Nowdate ; RTC_TimeTypeDef Nowtime ; HAL_RTC_GetTime (&hrtc,&Nowtime,RTC_FORMAT_BIN);//获取时间存储到相关寄存器 HAL_RTC_GetDate(&hrtc,&Nowdate,RTC_FORMAT_BIN); sprintf((char *)showtime,"%2d:%2d:%2d",Nowtime.Hours,Nowtime.Minutes,Nowtime.Seconds) ;//存储到showtime里,并在LCD上显示 LCD_DisplayStringLine(Line8,(uint8_t *)ShowTime); sprintf((char *)showdate,"%2d-%2d-%2d",2000 + Nowdate.Year,Nowdate.Month,Nowdate.Date) ;//存储到showdate里,并在LCD上显示惇年份是只有后两位,需要加上2000 LCD_DisplayStringLine(Line9,(uint8_t *)ShowDate); } void RTC_SetTime (uint8_t HH, uint8_t MM, uint8_t SS) { RTC_TimeTypeDef sTime; sTime.Hours = HH; sTime.Minutes = MM; sTime.Seconds = SS; if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK) { Error_Handler(); } } static void RTC_SetDate (uint8_t YY, uint8_t MM, uint8_t DD) { RTC_DateTypeDef sDate; sDate.WeekDay = RTC_WEEKDAY_MONDAY; sDate.Month = MM; sDate.Date = DD; sDate.Year = YY; if (HAL_RTC_SetDate(&hrtc, &sDate, RTC_FORMAT_BIN) != HAL_OK) { Error_Handler(); } }
2.在main.c中的int main(void)函数添加如下代码
RTC_SetDate(22,11,15);
RTC_SetTime(23,59,45);
3.在while(1)中添加如下代码
RTC_CalendarShow(ShowTime,ShowDate);
RTC(Real-Time Clock)和RCC(Reset and Clock Control)是微控制器和其他嵌入式系统中常见的两个组件,它们在功能和用途上有显著的区别:
1.RTC(实时时钟):
功能:RTC主要用于保持实时日期和时间的记录,即使在主电源断电的情况下也能通过备用电池继续工作。
应用:RTC用于提供精确的时间和日期,常见于需要记录日志、时间戳、闹钟或定时器功能的系统中。
工作方式:RTC通常具有自己的振荡器和电源,确保在系统断电时仍能保持时间的准确性。
接口和控制:可以通过特定的通信接口(如I2C、SPI等)来设置和读取RTC的时间和日期。
2.RCC(复位和时钟控制):
功能:RCC是STM32的时钟控制器,可开启或关闭各总线的时钟,在使用各外设功能必须先开启其对应的时钟,没有这个时钟内部的各器件就不能运行。
应用:RCC用于配置微控制器的时钟树,调整各种外设和处理器的运行频率。
工作方式:RCC可以选择不同的时钟源(如内部振荡器、外部晶振等),并对这些时钟源进行分频、倍频以满足不同部件的时钟需求。
重要性:RCC对于系统性能和功耗管理至关重要,它影响着微控制器的运行效率和稳定性。
总结来说,RTC主要是用于跟踪实时日期和时间,而RCC则是用于配置和管理微控制器的整个时钟系统。两者虽然在名字上有相似之处,但在功能和应用上有着明显的不同。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。