【沁恒 CH32V208 开发板免费试用】RTC测试 - RISC-V MCU技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回

江强 关注 私信
[活动]

【沁恒 CH32V208 开发板免费试用】RTC测试

RCT的例程中只有设置RTC时间,没有后续使用的过程

u8 RTC_Init(void)
{
    u8 temp = 0;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
    PWR_BackupAccessCmd(ENABLE);

    /* Is it the first configuration */

    BKP_DeInit();
    RCC_LSEConfig(RCC_LSE_ON);
    while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET && temp < 250)
    {
            temp++;
            Delay_Ms(20);
    }
    if(temp >= 250)
    return 1;
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
    RCC_RTCCLKCmd(ENABLE);
    RTC_WaitForLastTask();
    RTC_WaitForSynchro();
    //		RTC_ITConfig(RTC_IT_ALR, ENABLE);
    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;
}

上述是配置RTC源代码,在配置中可以看到,RTC将BKP给DeInit了,在配置SEC秒中断后开始设置时间,时间定在了2019年10月8日,13点58分55秒,在后续若需要设置时间可以使用该函数,但是需要进入配置模式,从24行开始到30行。
使用该代码,每次开机都是这个时间开始,因此我们要使用的时候按以下代码修改

u8 RTC_Init(void)
{
    u8 temp = 0;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
    PWR_BackupAccessCmd(ENABLE);

    /* Is it the first configuration */

   // BKP_DeInit();
    RCC_LSEConfig(RCC_LSE_ON);
    while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET && temp < 250)
    {
            temp++;
            Delay_Ms(20);
    }
    if(temp >= 250)
    return 1;
    RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
    RCC_RTCCLKCmd(ENABLE);
    RTC_WaitForLastTask();
    RTC_WaitForSynchro();
    //		RTC_ITConfig(RTC_IT_ALR, ENABLE);
    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;
}

将BKP的DeInit和进入配置模式取消即可正常获取RTC计数的值了。

更多回帖

×
发帖