介绍
RTC(实时时钟)不仅仅提供计数功能,它是一个完整的时钟和日历模块,用于提供日期和时间信息。RTC 能够提供年、月、日、星期、时、分、秒等时间信息,并且通常具有闹钟功能,可以用于定时唤醒或触发事件。
RTC 模块的特点包括:
-
时间保持:即使在主电源断电的情况下,RTC 也能通过备用电源(如电池或超级电容)保持时间的运行。
-
日历功能:RTC 能够跟踪当前的日期,包括年、月、日和星期信息。
-
闹钟功能:RTC 可以设置闹钟,当达到设定的时间时,可以触发中断或唤醒微控制器。
-
时间格式:RTC 支持多种时间格式,如12小时制和24小时制。
-
自动日历管理:RTC 能够处理闰年和月份天数的差异,自动调整日期。
-
时间同步:RTC 可以与外部时间源(如网络时间协议 NTP)同步,以保持时间的准确性。
-
温度补偿:一些 RTC 模块具有温度补偿功能,以减少温度变化对时钟准确性的影响。
STM32的HAL库来配置RTC(实时时钟)模块通常包括以下几个步骤:
-
RTC时钟源配置:首先,需要配置RTC的时钟源,这通常是通过LSE(低速外部时钟)或者LSI(低速内部时钟)来完成的。这可以通过调用
HAL_RCC_OscConfig()
函数来设置。 -
启用RTC时钟:通过
__HAL_RCC_RTC_ENABLE()
宏启用RTC时钟。 -
RTC时间结构体初始化:创建一个
RTC_TimeTypeDef
和RTC_DateTypeDef
结构体变量来配置时间和日期。 -
配置RTC:通过
HAL_RTC_Init()
函数来初始化RTC。在这个函数内部,会调用HAL_RTC_MspInit()
来配置RTC相关的GPIO、NVIC中断和时钟。 -
设置时间:使用
HAL_RTC_SetTime()
函数来设置时间,使用HAL_RTC_SetDate()
函数来设置日期。 -
启用相关中断(可选):如果需要使用RTC的中断,比如闹钟中断,可以通过
HAL_RTC_EnableIT()
函数来使能。 -
中断处理函数(可选):编写中断处理函数,例如
HAL_RTC_AlarmAEventCallback()
,当RTC闹钟事件发生时会调用这个函数。 -
启动RTC:最后,通过调用
HAL_RTCEx_RTCCLKConfig()
函数来启动RTC时钟。
stm32CudeMX设置
1设置时钟源
RTC使用外部低数时钟
1.1
1.2打开RTC
1.3设置RTC时钟源
1.4设置其他时钟
2设置RTC
2.1激活时钟源和激活日历()将其勾选
2.2RTC配置
设置时间为2024年5月8日19:43:0
3使用uart输出数据
之后生成代码
源码设置
函数
-
设置当前时间:
- 调用
HAL_RTC_SetTime
来设置小时、分钟、秒和亚秒。 - 调用
HAL_RTC_SetDate
来设置年、月、日和星期。
- 调用
-
获取当前时间:
- 调用
HAL_RTC_GetTime
来获取当前时间。 - 调用
HAL_RTC_GetDate
来获取当前日期。
- 调用
-
配置闹钟:
- 调用
HAL_RTC_SetAlarm
来设置闹钟A或B的时间。 - 调用
HAL_RTC_GetAlarm
来获取闹钟的当前设置。
- 调用
-
处理闹钟中断:
- 在闹钟中断服务函数中调用
HAL_RTC_AlarmIRQHandler
来处理闹钟中断事件。
- 在闹钟中断服务函数中调用
-
配置唤醒定时器:
- 调用
HAL_RTCEx_SetWakeUpTimer
来配置唤醒定时器,用于低功耗模式下的定时唤醒。
- 调用
-
处理唤醒定时器中断:
- 在唤醒定时器中断服务函数中调用
HAL_RTCEx_WakeUpTimerIRQHandler
来处理定时器中断事件。
- 在唤醒定时器中断服务函数中调用
-
防篡改(Tamper)功能:
- 调用
HAL_RTCEx_SetTamper
来配置防篡改功能。 - 调用
HAL_RTCEx_TamperGetStatus
来获取防篡改状态。
- 调用
-
备份寄存器操作:
-
//在系统断电后,RTC 模块仍然可以运行,因为它由专用的电源供电。这样,即使在断电情况下,RTC 也可以继续跟踪时间,并将数据写入备份寄存器中。当系统电源恢复时,备份寄存器中的数据仍然可以访问,并且可以用来恢复系统的状态或配置。
- 调用
HAL_RTCEx_BKUPWrite
来向备份寄存器写入数据。 - 调用
HAL_RTCEx_BKUPRead
来从备份寄存器读取数据。
- 调用
-
-
校准RTC:
- 调用
HAL_RTCEx_SetCalibrationOutPut
来配置RTC的校准输出。 - 调用
HAL_RTCEx_SetCalibration
来设置RTC的校准值。
- 调用
-
时间戳功能:
- 调用
HAL_RTCEx_SetTimeStamp
来配置时间戳功能。 - 调用
HAL_RTCEx_GetTimeStamp
来获取时间戳值。
- 调用