文章目录[隐藏]
一、 RTC
1.定义:
RTC的英文全称是Real-Time Clock,翻译过来是实时时钟芯片。 RTC芯片是一种能提供日历/时钟(世纪、年、月、时、分、秒)及数据存储等功能的专用集成电路。
2.应用
跟踪日期和时间。
报警、闹钟、看门狗、高精度的校准寄存器。
在待机状态下,作为逻辑电路的主时钟。
信号时钟源和参数设置存储电路。
3.应用领域
适合于一切需要微功耗及准确计时的场合。
嵌入式领域:车载电子、手机、数码相机、MP3、MP4、电子词典等
电器仪表:电视机、复费率电表、高精度时钟、可编程时间控制器等。
通信工程、电气自动化、工业控制等自动化程度高的领域中的无人值守环境。
4.特点
计时准确、耗电低、体积小、价格便宜
二、CubeMX创建项目
1.配置RCC
2.配置RTC
3.配置串口
4.配置时钟
5.配置项目
三、RTC操作
1.HAL库RTC相关操作函数
/*设置系统时间*/
HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
/*读取系统时间*/
HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
/*设置系统日期*/
HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
/*读取系统日期*/
HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
/*启动报警功能*/
HAL_StatusTypeDef HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format)
/*设置报警中断*/
HAL_StatusTypeDef HAL_RTC_SetAlarm_IT(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format)
/*报警时间回调函数*/
__weak void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
/*写入后备储存器*/
void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data)
/*读取后备储存器*/
uint32_t HAL_RTCEx_BKUPRead(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister
2.读取RTC初始日期
定义日期时间对象
RTC_DateTypeDef date; //获取日期结构体
RTC_TimeTypeDef time; //获取时间结构体
获取日期和时间并输出
HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BIN);
printf("%02d/%02d/%02d %02d:%02d:%02d\r\n",date.Year,date.Month,date.Date,time.Hours,time.Minutes,time.Seconds);
HAL_Delay(1000);
结果
可以发现输出的默认日期为0000/01/01 00:00:00,HAL库的日期是需要默认+2000的,也就是2000/01/01 00:00:00。
3.输出当前时间
初始化日期和时间
date.Year=21;
date.Month=11;
date.Date=29;
date.WeekDay=RTC_WEEKDAY_FRIDAY;
time.Hours=20;
time.Minutes=20;
time.Seconds=20;
HAL_RTC_SetDate(&hrtc,&date,RTC_FORMAT_BIN);
HAL_RTC_SetTime(&hrtc,&time,RTC_FORMAT_BIN);
获取日期和时间并输出
HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BIN);
printf("%0004d/%02d/%02d %02d:%02d:%02d\r\n",date.Year+2000,date.Month,date.Date,time.Hours,time.Minutes,time.Seconds);
HAL_Delay(1000);
结果
4.使用keil仿真查看串口
红色为PC13的波形,蓝色为串口一的波形。
由于没有明显的划分字节,不好分析。所以建议SaleaeLogic16逻辑分析仪进行分析。
5.使用SaleaeLogic16逻辑分析仪分析串口协议
截取5秒的波形图
GPIOC13LED波形
可以发现PC13引脚每秒发生一次翻转,参考代码可以发现确实如此
串口波形
每八个点对应一个字节
其中高电平对应1,低电平对应0。
从右往左读,第一个的二进制为00110010,对应十进制的50,也就是数字2对应的ASCII码值。
该波形全部数据依次为2021/11//29 20:43:25\r\n
四、总结
RTC可以帮助我们获取时间戳
五、参考
https://www.cnblogs.com/dreamrj/p/14046598.html
https://blog.csdn.net/as480133937/article/details/105741893
版权声明:本文为CSDN博主「qq_46132489」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_46132489/article/details/121803166
一、 RTC
1.定义:
RTC的英文全称是Real-Time Clock,翻译过来是实时时钟芯片。 RTC芯片是一种能提供日历/时钟(世纪、年、月、时、分、秒)及数据存储等功能的专用集成电路。
2.应用
跟踪日期和时间。
报警、闹钟、看门狗、高精度的校准寄存器。
在待机状态下,作为逻辑电路的主时钟。
信号时钟源和参数设置存储电路。
3.应用领域
适合于一切需要微功耗及准确计时的场合。
嵌入式领域:车载电子、手机、数码相机、MP3、MP4、电子词典等
电器仪表:电视机、复费率电表、高精度时钟、可编程时间控制器等。
通信工程、电气自动化、工业控制等自动化程度高的领域中的无人值守环境。
4.特点
计时准确、耗电低、体积小、价格便宜
二、CubeMX创建项目
1.配置RCC
2.配置RTC
3.配置串口
4.配置时钟
5.配置项目
三、RTC操作
1.HAL库RTC相关操作函数
/*设置系统时间*/
HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
/*读取系统时间*/
HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
/*设置系统日期*/
HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
/*读取系统日期*/
HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
/*启动报警功能*/
HAL_StatusTypeDef HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format)
/*设置报警中断*/
HAL_StatusTypeDef HAL_RTC_SetAlarm_IT(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format)
/*报警时间回调函数*/
__weak void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)
/*写入后备储存器*/
void HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data)
/*读取后备储存器*/
uint32_t HAL_RTCEx_BKUPRead(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister
2.读取RTC初始日期
定义日期时间对象
RTC_DateTypeDef date; //获取日期结构体
RTC_TimeTypeDef time; //获取时间结构体
获取日期和时间并输出
HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BIN);
printf("%02d/%02d/%02d %02d:%02d:%02d\r\n",date.Year,date.Month,date.Date,time.Hours,time.Minutes,time.Seconds);
HAL_Delay(1000);
结果
可以发现输出的默认日期为0000/01/01 00:00:00,HAL库的日期是需要默认+2000的,也就是2000/01/01 00:00:00。
3.输出当前时间
初始化日期和时间
date.Year=21;
date.Month=11;
date.Date=29;
date.WeekDay=RTC_WEEKDAY_FRIDAY;
time.Hours=20;
time.Minutes=20;
time.Seconds=20;
HAL_RTC_SetDate(&hrtc,&date,RTC_FORMAT_BIN);
HAL_RTC_SetTime(&hrtc,&time,RTC_FORMAT_BIN);
获取日期和时间并输出
HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN);
HAL_RTC_GetDate(&hrtc, &date, RTC_FORMAT_BIN);
printf("%0004d/%02d/%02d %02d:%02d:%02d\r\n",date.Year+2000,date.Month,date.Date,time.Hours,time.Minutes,time.Seconds);
HAL_Delay(1000);
结果
4.使用keil仿真查看串口
红色为PC13的波形,蓝色为串口一的波形。
由于没有明显的划分字节,不好分析。所以建议SaleaeLogic16逻辑分析仪进行分析。
5.使用SaleaeLogic16逻辑分析仪分析串口协议
截取5秒的波形图
GPIOC13LED波形
可以发现PC13引脚每秒发生一次翻转,参考代码可以发现确实如此
串口波形
每八个点对应一个字节
其中高电平对应1,低电平对应0。
从右往左读,第一个的二进制为00110010,对应十进制的50,也就是数字2对应的ASCII码值。
该波形全部数据依次为2021/11//29 20:43:25\r\n
四、总结
RTC可以帮助我们获取时间戳
五、参考
https://www.cnblogs.com/dreamrj/p/14046598.html
https://blog.csdn.net/as480133937/article/details/105741893
版权声明:本文为CSDN博主「qq_46132489」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_46132489/article/details/121803166
暂无评论