【求助】GD32L233CB RTC初始化失败

[复制链接]
 楼主| matrixwell 发表于 2024-12-31 13:04 | 显示全部楼层 |阅读模式
芯片型号:GD32L233CBT6,RTC功能测试了几天一直工作正常,今天突然出现无法初始化的问题,rtc设置不了,INITF始终不为1导致超时。使用官方的驱动,GD32L23x_Firmware_Library_V2.0.2,在此处判断INITF时候超时报错。


微信图片_20241231125609.png

RTC初始化代码如下,前两天调试一直都正常的,没发现代码里面有什么问题,使用的内部32K时钟。
  1. #define BIN_TO_BCD(x) ((((x) / 10) << 4) + ((x) % 10))
  2. #define BCD_TO_BIN(x) (10 * ((x) >> 4) + ((x) & 0x0F))

  3. #define RTC_IRC32K
  4. //#define RTC_LXTAL

  5. #ifdef RTC_IRC32K
  6. #define PRESCALER_S         0x13F
  7. #define PRESCALER_A         0x63
  8. #endif
  9. #ifdef RTC_LXTAL
  10. #define PRESCALER_S         0xFF
  11. #define PRESCALER_A         0x7F
  12. #endif

  13. struct tm calendar;
  14. uint32_t RTCSRC_FLAG = 0;

  1. void app_rtc_init()
  2. {
  3.         uint32_t RTCSRC_FLAG = 0;
  4.         rcu_periph_clock_enable(RCU_PMU);
  5.     rcu_periph_clock_enable(RCU_BKP);
  6.        
  7. #ifdef RTC_IRC32K
  8.         rcu_osci_on(RCU_IRC32K);
  9.     rcu_osci_stab_wait(RCU_IRC32K);
  10.     rcu_rtc_clock_config(RCU_RTCSRC_IRC32K);
  11. #endif
  12. #ifdef RTC_LXTAL
  13.         rcu_osci_on(RCU_LXTAL);
  14.     rcu_osci_stab_wait(RCU_LXTAL);
  15.     rcu_rtc_clock_config(RCU_RTCSRC_LXTAL);
  16. #endif
  17.     rcu_periph_clock_enable(RCU_RTC);
  18.     rtc_register_sync_wait();
  19.        
  20.          /* detect the reset source */
  21. //        if(RESET != rcu_flag_get(RCU_FLAG_PORRST)) {
  22. //                printf("power on reset occurred....\n\r");
  23. //        } else if(RESET != rcu_flag_get(RCU_FLAG_EPRST)) {
  24. //                printf("external reset occurred....\n\r");
  25. //        }
  26. //        printf("no need to configure RTC....\n\r");
  27. //        rcu_all_reset_flag_clear();

  28.         pmu_backup_write_enable();
  29.         RTCSRC_FLAG = GET_BITS(RCU_BDCTL, 8, 9);
  30.         if(RTCSRC_FLAG == 0x00)
  31.         {
  32.                 calendar.tm_year=YEAR_BASE+25;
  33.                 calendar.tm_mon=12;
  34.                 calendar.tm_mday=30;
  35.                 calendar.tm_hour=1;
  36.                 calendar.tm_min=0;
  37.                 calendar.tm_sec=40;
  38.                 rtc_set_time(&calendar);
  39.         }

  40. }

  41. void rtc_set_time(struct tm *time_struct)
  42. {
  43.         rtc_parameter_struct rtc_initpara = {0};
  44.         /* RTC时钟频率 = 32.768kHz / (255 + 1) / (127 + 1) = 1Hz */
  45.     rtc_initpara.factor_asyn = PRESCALER_A;
  46.     rtc_initpara.factor_syn = PRESCALER_S;
  47.     rtc_initpara.display_format = RTC_24HOUR;
  48.         rtc_initpara.year = BIN_TO_BCD(time_struct->tm_year - YEAR_BASE);
  49.         rtc_initpara.month = BIN_TO_BCD(time_struct->tm_mon);
  50.         rtc_initpara.date = BIN_TO_BCD(time_struct->tm_mday);
  51.         rtc_initpara.hour = BIN_TO_BCD(time_struct->tm_hour);
  52.         rtc_initpara.minute = BIN_TO_BCD(time_struct->tm_min);
  53.         rtc_initpara.second = BIN_TO_BCD(time_struct->tm_sec);
  54.         rtc_initpara.day_of_week = time_struct->tm_wday;
  55.         rtc_init(&rtc_initpara);
  56. }


Sam131208 发表于 2025-1-2 08:35 | 显示全部楼层
  是不是pmu_backup_write_enable()得往前挪一下,放在rcu_periph_clock_enable(RCU_BKP)后面。
xionghaoyun 发表于 2025-1-2 10:08 | 显示全部楼层
例程都不行 要找FAE看看
laocuo1142 发表于 2025-1-6 14:00 | 显示全部楼层
检查电源和复位
classroom 发表于 2025-1-6 14:07 | 显示全部楼层
在初始化过程中,检查是否有任何步骤失败或返回错误代码。
elephant00 发表于 2025-1-6 14:13 | 显示全部楼层
更新固件和驱动库
elephant00 发表于 2025-1-6 14:16 | 显示全部楼层
硬件复位试试
flycamelaaa 发表于 2025-1-6 15:00 | 显示全部楼层
如果复位信号不稳定或持续时间不够长,可能会导致RTC模块无法正确初始化。
powerantone 发表于 2025-1-6 18:00 | 显示全部楼层
RTC时钟源配置是否正确
stormwind123 发表于 2025-1-6 19:00 | 显示全部楼层
如果使用LSE检查晶振是否连接正确,以及是否有足够的起振时间,如果使用LSI,请确保它已被正确启用。
probedog 发表于 2025-1-6 19:00 | 显示全部楼层
RTC寄存器配置可能不对
jcky001 发表于 2025-1-7 14:00 | 显示全部楼层
硬件故障
Sam131208 发表于 2025-1-13 11:06 | 显示全部楼层
  发现同样问题,版本GD32L23x_Firmware_Library_V2.0.2。 手动调整日历,无法更新日历,修改RTC_INITM_TIMEOUT也无法解决。
陈吉Ch 发表于 2025-4-30 10:08 | 显示全部楼层
可以看看这篇帖子:GD32F4系列 RTC使用外部低速晶振配置时钟问题
https://bbs.21ic.com/icview-3197106-1-1.html?fromuser=%E9%99%88%E5%90%89Ch
(出处: 21ic电子技术开**坛)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

1

主题

1

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部