使用HAL库编写STM32的RTC函数
1设置当前时间:
调用 HAL_RTC_SetTime 来设置小时、分钟、秒和亚秒。
调用 HAL_RTC_SetDate 来设置年、月、日和星期。
HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format);
HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format);
HAL_RTC_SetTime
这个函数用于设置RTC的时间,包括小时、分钟、秒和亚秒。
hrtc
:指向RTC_HandleTypeDef
结构体的指针,该结构体包含了RTC模块的配置信息。sTime
:指向RTC_TimeTypeDef
结构体的指针,该结构体用于存储时间信息。//自己创建Format
:这个参数指定了时间数据的格式,可以是RTC_FORMAT_BIN
(二进制格式)或RTC_FORMAT_BCD
(BCD格式)。HAL_RTC_SetDate
这个函数用于设置RTC的日期,包括年、月、日和星期。
hrtc
:指向RTC_HandleTypeDef
结构体的指针,该结构体包含了RTC模块的配置信息。sDate
:指向RTC_DateTypeDef
结构体的指针,该结构体用于存储日期信息。//自己创建Format
:这个参数指定了日期数据的格式,可以是RTC_FORMAT_BIN
(二进制格式)或RTC_FORMAT_BCD
(BCD格式)。2获取当前时间:
调用 HAL_RTC_GetTime 来获取当前时间。
调用 HAL_RTC_GetDate 来获取当前日期。
HAL_StatusTypeDef HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format);
HAL_StatusTypeDef HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format);
HAL_RTC_GetTime
这个函数用于获取RTC的当前时间,包括小时、分钟、秒和亚秒。
hrtc
:指向RTC_HandleTypeDef
结构体的指针,该结构体包含了RTC模块的配置信息。sTime
:指向RTC_TimeTypeDef
结构体的指针,该结构体用于存储获取的时间信息。Format
:这个参数指定了时间数据的格式,可以是RTC_FORMAT_BIN
(二进制格式)或RTC_FORMAT_BCD
(BCD格式)。HAL_RTC_GetDate
这个函数用于获取RTC的当前日期,包括年、月、日和星期。
hrtc
:指向RTC_HandleTypeDef
结构体的指针,该结构体包含了RTC模块的配置信息。sDate
:指向RTC_DateTypeDef
结构体的指针,该结构体用于存储获取的日期信息。Format
:这个参数指定了日期数据的格式,可以是RTC_FORMAT_BIN
(二进制格式)或RTC_FORMAT_BCD
(BCD格式)。-
3配置闹钟:
- 调用
HAL_RTC_SetAlarm
来设置闹钟A或B的时间。 - 调用
HAL_RTC_GetAlarm
来获取闹钟的当前设置。
HAL_StatusTypeDef HAL_RTC_SetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Format);
HAL_StatusTypeDef HAL_RTC_GetAlarm(RTC_HandleTypeDef *hrtc, RTC_AlarmTypeDef *sAlarm, uint32_t Alarm, uint32_t Format);
HAL_RTC_SetAlarm
这个函数用于设置RTC的闹钟时间。
hrtc
:指向RTC_HandleTypeDef
结构体的指针,该结构体包含了RTC模块的配置信息。sAlarm
:指向RTC_AlarmTypeDef
结构体的指针,该结构体用于存储闹钟时间信息。Format
:这个参数指定了时间数据的格式,可以是RTC_FORMAT_BIN
(二进制格式)或RTC_FORMAT_BCD
(BCD格式)。HAL_RTC_GetAlarm
这个函数用于获取RTC的当前闹钟设置。
hrtc
:指向RTC_HandleTypeDef
结构体的指针,该结构体包含了RTC模块的配置信息。sAlarm
:指向RTC_AlarmTypeDef
结构体的指针,该结构体用于存储获取的闹钟信息。Alarm
:这个参数指定了要获取的闹钟,可以是RTC_ALARM_A
或RTC_ALARM_B
。Format
:这个参数指定了时间数据的格式,可以是RTC_FORMAT_BIN
(二进制格式)或RTC_FORMAT_BCD
(BCD格式)。闹钟A(Alarm A)
闹钟A是一个功能强大的闹钟,它可以配置为在特定的日期和时间触发,或者忽略日期,仅根据时间触发。它还可以配置为在每周的特定日子触发。闹钟A可以用来实现各种复杂的闹钟功能,比如每天的闹钟、每周特定日子的闹钟或者特定日期的闹钟。
闹钟B(Alarm B)
闹钟B是一个简单的秒闹钟,它可以在设定的秒数后触发。闹钟B通常用于实现周期性的事件,比如每秒、每分钟或每小时触发一次。闹钟B不支持基于日期的触发,它只能根据时间(小时、分钟和秒)来触发。
-
4处理闹钟中断:
- 在闹钟中断服务函数中调用
HAL_RTC_AlarmIRQHandler
来处理闹钟中断事件。
-
5配置唤醒定时器:
- 调用
HAL_RTCEx_SetWakeUpTimer
来配置唤醒定时器,用于低功耗模式下的定时唤醒。 -
HAL_StatusTypeDef HAL_RTCEx_SetWakeUpTimer(RTC_HandleTypeDef *hrtc, uint32_t WakeUpCounter, uint32_t WakeUpClock);
hrtc
:指向RTC_HandleTypeDef
结构体的指针,该结构体包含了RTC模块的配置信息。WakeUpCounter
:唤醒定时器的计数值。这个值决定了唤醒定时器在唤醒事件发生之前会等待的时钟周期数。计数值的计算取决于唤醒时钟源的选择。WakeUpClock
:唤醒定时器的时钟源。这个参数可以是RTC_WAKEUPCLOCK_RTCCLK_DIV16
、RTC_WAKEUPCLOCK_RTCCLK_DIV8
、RTC_WAKEUPCLOCK_RTCCLK_DIV4
、RTC_WAKEUPCLOCK_RTCCLK_DIV2
、RTC_WAKEUPCLOCK_CK_SPRE_16BITS
或RTC_WAKEUPCLOCK_CK_SPRE_17BITS
,用于选择唤醒定时器的时钟分频。-
6处理唤醒定时器中断:
- 在唤醒定时器中断服务函数中调用
HAL_RTCEx_WakeUpTimerIRQHandler
来处理定时器中断事件。 -
7防篡改(Tamper)功能:
- 调用
HAL_RTCEx_SetTamper
来配置防篡改功能。 - 调用
HAL_RTCEx_TamperGetStatus
来获取防篡改状态。 -
HAL_StatusTypeDef HAL_RTCEx_SetTamper(RTC_HandleTypeDef *hrtc, uint32_t Tamper, uint32_t TamperPinActiveLevel); HAL_StatusTypeDef HAL_RTCEx_TamperGetStatus(RTC_HandleTypeDef *hrtc, uint32_t Tamper, uint32_t *TamperStatus);
HAL_RTCEx_SetTamper
hrtc
:指向RTC_HandleTypeDef
结构体的指针,该结构体包含了RTC模块的配置信息。Tamper
:这个参数指定了要配置的防篡改引脚。它可以是RTC_TAMPER_1
、RTC_TAMPER_2
或RTC_TAMPER_3
。TamperPinActiveLevel
:这个参数指定了防篡改引脚的激活电平。它可以是RTC_TAMPERPIN_ACTIVE_HIGH
(高电平激活)或RTC_TAMPERPIN_ACTIVE_LOW
(低电平激活)。-
HAL_RTCEx_TamperGetStatus
hrtc
:指向RTC_HandleTypeDef
结构体的指针,该结构体包含了RTC模块的配置信息。Tamper
:这个参数指定了要查询的防篡改输入。它可以是RTC_TAMPER_1
、RTC_TAMPER_2
、RTC_TAMPER_3
或RTC_TAMPER_ALL
。TamperStatus
:指向uint32_t
类型的指针,用于存储获取的防篡改状态-
8备份寄存器操作://一个节点为 uint32_t最大存储数字ffff 65535
- 调用
HAL_RTCEx_BKUPWrite
来向备份寄存器写入数据。 - 调用
HAL_RTCEx_BKUPRead
来从备份寄存器读取数据。 -
HAL_StatusTypeDef HAL_RTCEx_BKUPWrite(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister, uint32_t Data)
hrtc
: 一个指向RTC_HandleTypeDef
结构体的指针,该结构体包含了RTC模块的配置和状态信息。BackupRegister
: 要写入的备份寄存器的编号。STM32微控制器通常有多个备份寄存器,编号从0开始。Data
: 要写入备份寄存器的数据。这个参数的类型通常是uint32_t
,即无符号32位整数。-
uint32_t HAL_RTCEx_BKUPRead(RTC_HandleTypeDef *hrtc, uint32_t BackupRegister)
hrtc
: 同上,指向RTC_HandleTypeDef
结构体的指针。BackupRegister
: 要读取的备份寄存器的编号。-
9校准RTC:
- 调用
HAL_RTCEx_SetCalibrationOutPut
来配置RTC的校准输出。 - 调用
HAL_RTCEx_SetCalibration
来设置RTC的校准值。 -
HAL_RTCEx_SetCalibrationOutPut
HAL_StatusTypeDef HAL_RTCEx_SetCalibrationOutPut(RTC_HandleTypeDef *hrtc, uint32_t CalibOutput, uint32_t CalibOutputPolarity, uint32_t CalibOutputFrequency)
hrtc
: 指向RTC_HandleTypeDef
结构体的指针,包含了RTC的配置和状态信息。CalibOutput
: 用于启用或禁用RTC校准输出。通常是一个布尔值,例如RTC_CALIBOUTPUT_ENABLE
或RTC_CALIBOUTPUT_DISABLE
。CalibOutputPolarity
: 用于设置校准输出的极性。可以是RTC_CALIBOUTPUT_POLARITY_HIGH
或RTC_CALIBOUTPUT_POLARITY_LOW
。CalibOutputFrequency
: 用于设置校准输出的频率。可以是RTC_CALIBOUTPUT_FREQ_512HZ
、RTC_CALIBOUTPUT_FREQ_1HZ
等。-
这个函数用于配置RTC的校准输出。校准输出是一个可以被用于外部时钟校准的信号。返回值是一个
HAL_StatusTypeDef
枚举类型的值,指示操作是否成功。HAL_RTCEx_SetCalibration
HAL_StatusTypeDef HAL_RTCEx_SetCalibration(RTC_HandleTypeDef *hrtc, uint32_t CalibSign, uint32_t Value)
hrtc
: 同上,指向RTC_HandleTypeDef
结构体的指针。CalibSign
: 用于设置校准值的符号。可以是RTC_CALIBSIGN_POSITIVE
或RTC_CALIBSIGN_NEGATIVE
。Value
: 要设置的校准值。这个值决定了校准的幅度。-
这个函数用于设置RTC的校准值。RTC校准功能允许微调时钟频率,以补偿晶体的偏差。返回值是一个
HAL_StatusTypeDef
枚举类型的值,指示操作是否成功。 -
10时间戳功能:
- 调用
HAL_RTCEx_SetTimeStamp
来配置时间戳功能。 - 调用
HAL_RTCEx_GetTimeStamp
来获取时间戳值。
HAL_RTCEx_SetTimeStamp
HAL_StatusTypeDef HAL_RTCEx_SetTimeStamp(RTC_HandleTypeDef *hrtc, uint32_t TimeStampEdge, uint32_t RTC_TimeStampPin)
hrtc
: 同上,指向RTC_HandleTypeDef
结构体的指针。TimeStampEdge
: 用于设置时间戳的触发边沿。可以是RTC_TIMESTAMPEDGE_RISING
或RTC_TIMESTAMPEDGE_FALLING
。RTC_TimeStampPin
: 用于选择时间戳功能的输入引脚。可以是RTC_TIMESTAMPPIN_DEFAULT
。这个函数用于配置RTC的时间戳功能。时间戳功能允许在指定的引脚上检测到边沿事件时捕获当前时间。返回值是一个HAL_StatusTypeDef
枚举类型的值,指示操作是否成功。
HAL_RTCEx_GetTimeStamp
HAL_StatusTypeDef HAL_RTCEx_GetTimeStamp(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTimeStamp, RTC_DateTypeDef *sTimeStampDate, uint32_t Format)
hrtc
: 同上,指向RTC_HandleTypeDef
结构体的指针。sTimeStamp
: 指向RTC_TimeTypeDef
结构体的指针,用于存储获取的时间戳时间。sTimeStampDate
: 指向RTC_DateTypeDef
结构体的指针,用于存储获取的时间戳日期。Format
: 用于指定时间戳的格式。可以是RTC_FORMAT_BIN
或RTC_FORMAT_BCD
。作者:快秃头的码农