eagle0754 发表于 2017-2-23 22:10:29

STM32 RTC采用外部晶振初始化通过但未启振

采用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();
}

freeelectron 发表于 2017-2-24 08:37:34

1.时钟配置看不出说明问题
2.LSE启振后肯定可以用示波器看
3.楼主的代码里面读的是RTC_BKP_DR0,而写得是RTC_BKP_DR10?

ts2000 发表于 2017-3-17 08:30:01

换个晶振试试?这种晶振比较容易坏。

无薪税绵 发表于 2017-3-17 08:35:25

如果硬件正常的话,晶振肯定会起振的。

还有,跟进 MyRTC_Init函数,看看程序是进入 未设置时间,还是已经设置时间。

nyszx 发表于 2017-3-17 09:12:18

楼主可以运行起来后,暂停程序,跟踪看一下RCC相关寄存器状态,判断是否正常。万一楼主测试方法不对,或是示波器探头有问题导致测量时晶振不振了呢,多方面排除一下。

hjl2832 发表于 2017-3-17 09:25:05

一般测试晶振时,要求示波器探头打到X10档,增加输入电阻,否则探头的并联电阻阻值过小,可能导致晶体反馈回路停止振荡。

johnson_gong 发表于 2017-3-17 09:54:40

用示波器测试方法是否正确?之前我们的同事在测试8MHz时,测试结果都是在400-500KHz之间,但是系统配置也是外部晶振法,但是就是测试不到8M信号。后来发现是那个示波器在测试时,由于没有自动功能,那个时间轴是设置在100uS极别,就是分辨率不够,测试不到8M信号,当调到几个nS极别就可以了。

胤幻1988 发表于 2017-3-17 10:28:14

这种情况多为硬件故障,ST的如果要求很严格,怕出错,我一次性直接用有源晶振~

cldym 发表于 2017-3-17 12:02:14

换个晶振试试?这种晶振比较容易坏。

中山无雪 发表于 2017-3-17 12:12:12

STM32对RTC晶振的选择很严格,有一份使用说明中有说明,自己找找看看
页: [1] 2
查看完整版本: STM32 RTC采用外部晶振初始化通过但未启振