一、RTC实时时钟
RTC简介
1)RTC简介
RTC是Real Time Clock 的简称,意为实时时钟。stm32提供了一个秒中断源和一个闹钟中断源,修改计数器的值可以重新设置系统当前的时间和日期。RTC模块之所以具有实时时钟功能,是因为它内部维持了一个独立的定时器,通过配置,可以让它准确地每秒钟中断一次。但实际上,RTC就只是一个定时器而已,掉电之后所有信息都会丢失,因此我们需要找一个地方来存储这些信息,于是就找到了备份寄存器。其在掉电后仍然可以通过纽扣电池供电,所以能时刻保存这些数据。
2)RTC工作过程
二、STM32CubeMx实现日历
1.项目创建
1)新建STM32CubeMx项目
时钟树设置
RCC设置
RTC设置
串口设置
生成代码即可
2.日期打印代码
定义结构体
/* USER CODE BEGIN PV */
RTC_DateTypeDef GetData; //获取日期结构体
RTC_TimeTypeDef GetTime; //获取时间结构体
/* USER CODE END PV */
重写串口输出
int fputc(int ch,FILE *f){
uint8_t temp[1]={ch};
HAL_UART_Transmit(&huart1,temp,1,2);
return ch;
}
串口打印时间
while (1)
{
/* 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日",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);
a=GetData.WeekDay;
if(a==01){printf("星期一\r\n");}
else if(a==02){printf("星期二\r\n");}
else if(a==03){printf("星期三\r\n");}
else if(a==04){printf("星期四\r\n");}
else if(a==05){printf("星期五\r\n");}
else if(a==06){printf("星期六\r\n");}
else if(a==07){printf("星期天\r\n");}
HAL_Delay(1000);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}