ST意法半导体
直播中

王萍

8年用户 1409经验值
私信 关注
[问答]

STM32L071配置RTC为24小时制,13点的时候会变为1点,为什么?

  RTC初始化的时候配置hrtc.Init.HourFormat = RTC_HOURFORMAT_24;
为了加快复现,起来之后我设置时间为12:59:58,再回读一下验证时间设置的没问题。
过了1点的时候我再读,就不是13点了,而是1点。如果我设置时间为13:00:00之后的时间,那么当天的时间就不会再变成12小时制
各位能帮忙分析一下吗?有些不理解这个现象

调用的代码部分如下:



回帖(2)

李高胜

2025-3-13 10:01:34
这个首先在调试模式下看看RTC 寄存器是否是设定的值并正常运行。
然后在看看读取RTC寄存器的值是否正常。
最后再看看打印的格式是否一致。
这边测试了一下,结果24小时显示没问题,跨越12:59:59后正常跳转到13:00:00
举报

h1654155275.5748

2025-3-17 17:59:26

在STM32L071的RTC配置中,你遇到的问题可能是由于RTC的HourFormat配置不正确或RTC寄存器的配置问题导致的。以下是一些可能的原因和解决方法:


1. 检查RTC的HourFormat配置


你在初始化RTC时设置了 hrtc.Init.HourFormat = RTC_HOURFORMAT_24;,这应该是正确的。但你需要确保这个配置确实被正确地应用到了RTC寄存器中。你可以通过调试器或直接读取RTC的寄存器来验证 RTC_CR 寄存器中的 FMT 位是否被正确设置为0(表示24小时制)。


   // 读取RTC控制寄存器
   uint32_t rtc_cr = RTC->CR;
   if ((rtc_cr & RTC_CR_FMT) != 0) {
       // FMT位为1,表示12小时制
       // 需要重新配置为24小时制
   }

2. 检查RTC时间设置


在设置RTC时间时,确保你使用的是24小时制的格式。如果你在设置时间时使用了12小时制的格式(例如,设置了AM/PM标志),这可能会导致RTC在13点时自动切换到1点。


   RTC_TimeTypeDef sTime = {0};
   sTime.Hours = 13;  // 确保使用24小时制
   sTime.Minutes = 0;
   sTime.Seconds = 0;
   sTime.DayLightSaving = RTC_DAYLIGHTSAVING_NONE;
   sTime.StoreOperation = RTC_STOREOPERATION_RESET;
   if (HAL_RTC_SetTime(&hrtc, &sTime, RTC_FORMAT_BIN) != HAL_OK) {
       // 错误处理
   }

3. 检查RTC的日期和时间寄存器


你可以通过读取RTC的日期和时间寄存器来验证当前的时间格式。确保 RTC_TR 寄存器中的 HTHU 字段表示的是24小时制的时间。


   uint32_t rtc_tr = RTC->TR;
   uint8_t hour = ((rtc_tr & RTC_TR_HT) >> 20) * 10 + ((rtc_tr & RTC_TR_HU) >> 16);
   if (hour >= 24) {
       // 时间格式可能不正确
   }

4. 检查RTC的初始化顺序


确保RTC的初始化顺序正确。通常情况下,你应该先初始化RTC时钟源,然后配置RTC的HourFormat,最后设置时间和日期。


5. 检查RTC的电源和备份域


STM32的RTC依赖于备份域(Backup Domain),确保备份域的电源(VBAT)是正常供电的,并且在复位后备份域的内容没有被清除。如果备份域的内容丢失,RTC的配置可能会恢复到默认值。


6. 调试和日志


如果以上步骤都没有解决问题,建议你增加一些调试信息,例如在设置时间和读取时间时打印日志,确保时间设置和读取的逻辑没有问题。


7. 固件库版本


确保你使用的STM32 HAL库是最新版本,或者至少是你使用的芯片型号的稳定版本。有时库中的bug可能会导致一些奇怪的行为。


8. 硬件问题


如果软件配置都正确,但仍然存在问题,可能需要检查硬件电路,尤其是RTC时钟源(LSE)是否稳定。


总结


你遇到的问题可能是由于RTC的HourFormat配置不正确或时间设置时使用了12小时制导致的。通过检查RTC寄存器的配置、确保时间设置使用24小时制、以及验证RTC的初始化顺序,应该能够解决这个问题。如果问题仍然存在,建议进一步调试或检查硬件电路。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分