qazplm3218 发表于 2019-6-21 10:23:04

stm32f103 RTC初始化问题?

stm32f103,晶振32.768HZ旁边的两个10PF电容没焊,导致系统在开机初始化RTC时失败,就一直卡在RTC初始化程序,导致进不了系统,
RTC程序如何调整,才能使RTC初始化失败也能顺利进入系统??

void RTC_Configuration(void)
{
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);                       
        PWR_BackupAccessCmd(ENABLE);                                       
        RCC_LSEConfig(RCC_LSE_ON);                                               
        while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET){;}                               
        RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);       
        RCC_RTCCLKCmd(ENABLE);                                                               
        RTC_WaitForSynchro();                                                                       
        RTC_WaitForLastTask();                                                               
        RTC_SetPrescaler(32767);                                                       
        RTC_WaitForLastTask();                                                               
        RTC_ITConfig(RTC_IT_SEC, ENABLE);                       
        RTC_WaitForLastTask();                                                               
}

wudianjun2001 发表于 2019-6-21 10:53:20

单步看走到哪一步,进入函数看看,有死循环的

qazplm3218 发表于 2019-6-21 11:01:06

wudianjun2001 发表于 2019-6-21 10:53
单步看走到哪一步,进入函数看看,有死循环的

知道程序在这条while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET){;} 里面死循环,
程序该如何调整,RTC初始化失败退出死循环??

发表于 2019-6-21 11:14:11

这里加超时机制,LSE启动失败以后,切换到LSI配置RTC。现在是MCU检测不到LSE的时钟。

toofree 发表于 2019-6-21 11:15:49

qazplm3218 发表于 2019-6-21 11:01
知道程序在这条while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET){;} 里面死循环,
程序该如何调整, ...
那只能修改程序了,while里面加个条件判断,多少次后退出循环。并且加个标志变量,用来指示RTC时钟是否正常。在主程序中判断标志变量,是否允许RTC相关操作。
页: [1]
查看完整版本: stm32f103 RTC初始化问题?