【STM32】HAL库开发教程(五)—RTC使用

前言

不必害怕未知,无需恐惧犯错,做一个Creator!

一、RTC简介

STM32F2的实时时钟(RTC)是一个独立的BCD(Binary Coded Decimal)定时器/计时器,提供了一个包括时间与日期的时钟/日历功能,两个闹钟中断,一个定期唤醒中断,并且包括一个自动唤醒单位管理的低功耗模式。

1.时钟与分频

STM32F2的RTC(RTCCLK)时钟源头可以从LES时钟、LSI时钟以及HSE时钟中进行选择,一般我们选择LSE外部低速时钟,即32.768Khz外部晶振作为时钟源。并且通过配置异步预分频器和同步预分频器设置1Hz的时钟核心。

2.开发步骤

1.STM32CubeMX中配置:时钟+RTC模式+RTC参数
2.Keil中对RTC时间和日期进行设置和获取
3.编写中断服务函数

二、STM32CbueMX配置

1.选取RTC进行配置

在STM32CubeMX首页找到并选择RTC进行相关配置
在这里插入图片描述

2.配置RTC模式

主要对RTC的各个模式进行选择,包括使能日历,闹钟和唤醒中断等。这里选择配置图中三处

在这里插入图片描述

3.配置RTC参数

主要对RTC的各个参数进行配置,包括:时间,日期,预分频设置,周期性唤醒的频率和计数值。这里配置如图所示。
在这里插入图片描述

4.配置NVIC中断优先级

主要对唤醒中断和闹钟中断的NVIC优先级进行配置
在这里插入图片描述

三、Keil程序开发

1.主要功能函数

设置日历参数
HAL_RTC_GetDate(&hrtc,&RTC_DateStruct,RTC_FORMAT_BIN);
HAL_RTC_GetTime(&hrtc,&RTC_TimeStruct,RTC_FORMAT_BIN);
获取日历参数
HAL_RTC_SetTime(&hrtc, &RTC_Time, RTC_FORMAT_BIN);
HAL_RTC_SetDate(&hrtc, &RTC_Date, RTC_FORMAT_BIN);

其中,第一个参数为RTC结构体,第二个参数为Time和Date结构体,第三个参数可设置为:RTC_FORMAT_BIN或RTC_FORMAT_BCD

周期性唤醒中断
void RTC_WKUP_IRQHandler(void)

2.相关代码

1.日历更新

日历更新程序如下(示例):

RTC_Time.Hours = 1;
RTC_Time.Minutes = 2;
RTC_Time.Seconds = 3;
RTC_Time.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
RTC_Time.StoreOperation = RTC_STOREOPERATION_RESET;
HAL_RTC_SetTime(&hrtc, &RTC_Time, RTC_FORMAT_BIN);
		
RTC_Date.WeekDay = 4;
RTC_Date.Month = 5;
RTC_Date.Date = 6;
RTC_Date.Year = 7;	
HAL_RTC_SetDate(&hrtc, &RTC_Date, RTC_FORMAT_BIN);

2.日历获取

日历获取程序如下(示例):

HAL_RTC_GetTime(&hrtc,&RTC_TimeStruct,RTC_FORMAT_BIN);
printf("Time:%02d:%02d:%02d",RTC_TimeStruct.Hours,RTC_TimeStruct.Minutes,RTC_TimeStruct.Seconds); 
HAL_RTC_GetDate(&hrtc,&RTC_DateStruct,RTC_FORMAT_BIN);
printf("Date:20%02d-%02d-%02d",RTC_DateStruct.Year,RTC_DateStruct.Month,RTC_DateStruct.Date); 

总结

本项目中RTC的使用主要可以归纳为:
1.日历的获取
2.日历的更新
3.周期性唤醒中断的使用
在正确配置好CubeMX后,通过对主要功能函数的使用实现对RTC的灵活使用。


提示:若有错误不足,欢迎批评指正。该系列文章仅供参考,欢迎互相学习交流。

感谢你的阅读,期待你的关注收藏点赞!

STM32HAL库中的RTC是指实时时钟(Real-Time Clock),用于提供精确的时间和日期信息。在STM32HAL库中,可以使用一些函数来设置和获取RTC的参数。 引用\[1\]中提到了一些设置和获取RTC参数的函数。例如,使用HAL_RTC_GetDate函数可以获取RTC的日期参数,使用HAL_RTC_GetTime函数可以获取RTC的时间参数。而使用HAL_RTC_SetTime函数可以设置RTC的时间参数,使用HAL_RTC_SetDate函数可以设置RTC的日期参数。 引用\[2\]中提到了RTC寄存器的一些信息。RTC寄存器包含了秒、分钟、小时、星期几、日期、月份和年份等信息。此外,RTC还可以提供亚秒值,并且可以自动补偿月份的天数。 引用\[3\]中提到了RTC的复位过程。除了一些特定的寄存器外,其他系统寄存器都会在系统复位或电源复位时进行异步复位。而RTC的特定寄存器(RTC_PRL、RTC_ALR、RTC_CNT和RTC_DIV)只能通过备份域复位信号进行复位。 综上所述,STM32HAL库中的RTC提供了设置和获取时间日期参数的函数,并且有相应的寄存器来存储这些参数。在复位过程中,RTC的特定寄存器可以通过备份域复位信号进行复位。 #### 引用[.reference_title] - *1* [【STM32HAL库开发教程()—RTC使用](https://blog.csdn.net/weixin_44064233/article/details/108326975)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [STM32日历读取,设置和输出](https://blog.csdn.net/qq_45874317/article/details/121697122)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值