CH32V208 RTC问题

/*********************************************************************

 * @fn      RTC_Init

 *

 * @brief   Initializes RTC collection.

 *

 * @return  1 - Init Fail

 *          0 - Init Success

 */

u8 RTC_Init(void)

{

    u8 temp = 0;

    u16 temp_16=0;

    /*开启时钟*/

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);     //开启PWR的时钟

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_BKP, ENABLE);     //开启BKP的时钟


    /*备份寄存器访问使能*/

    PWR_BackupAccessCmd(ENABLE);                            //使用PWR开启对备份寄存器的访问

    temp_16=BKP_ReadBackupRegister(BKP_DR1);

    if (temp_16 != 0xA5A5)          //通过写入备份寄存器的标志位,判断RTC是否是第一次配置 //if成立则执行第一次的RTC配置

    {

        RCC_LSEConfig(RCC_LSE_ON);                          //开启LSE时钟

        while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET && temp < 250)

        {

                temp++;

                Delay_Ms(20);

        }

        if(temp >= 250)

        return 1;


        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);             //选择RTCCLK来源为LSE

        RCC_RTCCLKCmd(ENABLE);                              //RTCCLK使能


        RTC_WaitForSynchro();                               //等待同步

        RTC_WaitForLastTask();                              //等待上一次操作完成


        RTC_SetPrescaler(32768 - 1);                        //设置RTC预分频器,预分频后的计数频率为1Hz

        RTC_WaitForLastTask();                              //等待上一次操作完成

        //RTC_SetCounter(100);                                //将秒计数器写入到RTC的CNT中

        RTC_WaitForLastTask();                              //等待上一次操作完成

        BKP_WriteBackupRegister(BKP_DR1, 0xA5A5);           //在备份寄存器写入自己规定的标志位,用于判断RTC是不是第一次执行配置


    }

    else                                                    //RTC不是第一次配置

    {

        RTC_WaitForSynchro();                               //等待同步

        RTC_WaitForLastTask();                              //等待上一次操作完成


    }

    RTC_ITConfig(RTC_IT_SEC, DISABLE);

    RTC_ITConfig(RTC_IT_OW, DISABLE);

    RTC_NVIC_Config();

    RTC17_Config_Standly();

    RTC_Get();

    return 0;


}

这是我初始化时钟的程序,在程序调试的时候,发现复位正常,但是在调试阶段,发现RTC_WaitForSynchro(); 函数一直过不去,不知道是什么情况

您好,您是用的内部还是外部的32K时钟?“RTC_WaitForSynchro(); 函数一直过不去”,常见情况是32K晶振没有起振。

如果用的外部的32K出问题,排查32K晶振的焊接、32K晶振引脚上有没有接干扰电路、外接的负载电容是否合理。可以尝试切换到内部32K振荡器来对比测试定位。


不是晶振问题,我是下载之后出的问题,感觉是下载之后,可能是rtc部分复位了吧


只有登录才能回复,可以选择微信账号登录