RTC例程如何用内置晶振的MCU运行?

CH32V20xEVT内的RTC例程, 在内置晶振的 CH32V203F8P6 开发板中运行输出总是0, 意识到例程中使用的是外置晶振, 于是修改程序的RTC初始化函数如下, 可是还是无法得到正确的输出, 请教高人指点, 谢谢!


u8 RTC_Init(void)

{

    u8 temp = 0;


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

    PWR_BackupAccessCmd(ENABLE); //使能 RTC 和后备寄存器访问

    BKP_DeInit();   //复位备份区域,将BKP寄存器清空

    RCC_LSICmd(ENABLE); //开启内部低速晶振LSI


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

    {

            temp++;

            Delay_Ms(20);

    }

    if(temp >= 250) {

        printf("failed to init.\r\n");

        return 1;

    }


    RCC_RTCCLKConfig (RCC_RTCCLKSource_LSI);

    RCC_RTCCLKCmd(ENABLE);


    RTC_WaitForLastTask();

    RTC_WaitForSynchro();


    RTC_ITConfig(RTC_IT_SEC, ENABLE);

    RTC_WaitForLastTask();

    RTC_EnterConfigMode();

    RTC_SetPrescaler(32767);

    RTC_WaitForLastTask();

    RTC_Set(2019, 10, 8, 13, 58, 55); /* Setup Time */

    RTC_ExitConfigMode();

    BKP_WriteBackupRegister(BKP_DR1, 0XA1A1);


    RTC_NVIC_Config();

    RTC_Get();


    return 0;

}


您好,附件例程为CH32V203F8P6 RTC例程,RTC时钟源配置为LSI,你可以参考一下。此外需要注意,若测试板没有外部晶振(HSE),配置系统主频的时候可以选择使用内部晶振HSI,如下图,可通过相关宏定义进行配置

icon_rar.gifCH32V203 F8P6 RTC.zip

image.png



使用您的程序确实编译成功了, 输出结果完全正确! 非常感谢!


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