一、RTC实时时钟
RTC简介
1)RTC简介
RTC是Real Time Clock 的简称,意为实时时钟。stm32提供了一个秒中断源和一个闹钟中断源,修改计数器的值可以重新设置系统当前的时间和日期。RTC模块之所以具有实时时钟功能,是因为它内部维持了一个独立的定时器,通过配置,可以让它准确地每秒钟中断一次。但实际上,RTC就只是一个定时器而已,掉电之后所有信息都会丢失,因此我们需要找一个地方来存储这些信息,于是就找到了备份寄存器。其在掉电后仍然可以通过纽扣电池供电,所以能时刻保存这些数据。
2)RTC工作过程
二、STM32CubeMx实现日历
1.项目创建
1)新建STM32CubeMx项目 时钟树设置
RCC设置 RTC设置 串口设置 生成代码即可
2.日期打印代码
定义结构体
RTC_DateTypeDef GetData;
RTC_TimeTypeDef GetTime;
重写串口输出
int fputc(int ch,FILE *f){
uint8_t temp[1]={ch};
HAL_UART_Transmit(&huart1,temp,1,2);
return ch;
}
串口打印时间
while (1)
{
HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);
printf("%02d年%02d月%02d日",2000 + GetData.Year, GetData.Month, GetData.Date);
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);
}
3.效果演示
参考
https://www.cnblogs.com/codingmengmeng/p/5480843.html
|