|
采用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();
- }
复制代码 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|