采用STM32F2平台,使用外部32.768晶振。RTC初始化如下,实际调试跟踪让其运行到RTC_Config下的while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);后能正常往后运行 
但用示波器测量晶振时没有启振。大家用的平台有没有测试下晶振到底启振没? 
为什么这个判断在外部晶振没启振时还可以通过,难道读回来的寄存器值不是真实反应外部晶振状态么? 
如果外部的32.768晶振没启振,是不是默认采用内部LSI的32KHz作为RTC时钟源了?因为我发现软件配置采用外部LSE,但是LSE没有启振时,RTC也能正常工作只是时间久了不准了。 
- void MyRTC_Init(void)
 
 - {
 
 -     if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2)//未设置时间
 
 -     {  
 
 -         RTC_Config();
 
 -         RTC_WriteBackupRegister(RTC_BKP_DR10,0xAA55);
 
 -         RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
 
 -         RTC_InitStructure.RTC_SynchPrediv = 0xFF;
 
 -         RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
 
 -         if(RTC_Init(&RTC_InitStructure) == ERROR)return 1;
 
 -         RTC_Timeset(0,0,0,15,4,23);
 
 -     }
 
 -     else
 
 -     {   
 
 -         RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
 
 -         PWR_BackupAccessCmd(ENABLE);
 
 -         RTC_WaitForSynchro();
 
 -         RTC_ClearFlag(RTC_FLAG_ALRAF);
 
 -         EXTI_ClearITPendingBit(EXTI_Line17);
 
 -         RTC_WriteBackupRegister(RTC_BKP_DR10,0xAA55);
 
 -     }
 
 - }
 
 - void RTC_Config(void)
 
 - {
 
 -     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
 
 -     PWR_BackupAccessCmd(ENABLE);
 
 -     RCC_LSEConfig(RCC_LSE_ON);
 
 -     while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);//为什么LSE没启振,此处还可以往下运行?
 
 -     RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
 
 -     RCC_RTCCLKCmd(ENABLE);
 
 -     RTC_WaitForSynchro();
 
 - }
 
  复制代码 
 
 | 
2.LSE启振后肯定可以用示波器看
3.楼主的代码里面读的是RTC_BKP_DR0,而写得是RTC_BKP_DR10?
评分
查看全部评分
评分
查看全部评分
还有,跟进 MyRTC_Init函数,看看程序是进入 未设置时间,还是已经设置时间。
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分
RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2;
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分