采用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;
评分
查看全部评分
评分
查看全部评分
评分
查看全部评分