你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
eagle0754 提问时间:2017-2-23 22:10 /
采用STM32F2平台,使用外部32.768晶振。RTC初始化如下,实际调试跟踪让其运行到RTC_Config下的while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);后能正常往后运行
但用示波器测量晶振时没有启振。大家用的平台有没有测试下晶振到底启振没?
为什么这个判断在外部晶振没启振时还可以通过,难道读回来的寄存器值不是真实反应外部晶振状态么?
如果外部的32.768晶振没启振,是不是默认采用内部LSI的32KHz作为RTC时钟源了?因为我发现软件配置采用外部LSE,但是LSE没有启振时,RTC也能正常工作只是时间久了不准了。
  1. void MyRTC_Init(void)
  2. {
  3.     if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2)//未设置时间
  4.     {  
  5.         RTC_Config();
  6.         RTC_WriteBackupRegister(RTC_BKP_DR10,0xAA55);
  7.         RTC_InitStructure.RTC_AsynchPrediv = 0x7F;
  8.         RTC_InitStructure.RTC_SynchPrediv = 0xFF;
  9.         RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
  10.         if(RTC_Init(&RTC_InitStructure) == ERROR)return 1;
  11.         RTC_Timeset(0,0,0,15,4,23);
  12.     }
  13.     else
  14.     {   
  15.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
  16.         PWR_BackupAccessCmd(ENABLE);
  17.         RTC_WaitForSynchro();
  18.         RTC_ClearFlag(RTC_FLAG_ALRAF);
  19.         EXTI_ClearITPendingBit(EXTI_Line17);
  20.         RTC_WriteBackupRegister(RTC_BKP_DR10,0xAA55);
  21.     }
  22. }
  23. void RTC_Config(void)
  24. {
  25.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
  26.     PWR_BackupAccessCmd(ENABLE);
  27.     RCC_LSEConfig(RCC_LSE_ON);
  28.     while(RCC_GetFlagStatus(RCC_FLAG_LSERDY)==RESET);//为什么LSE没启振,此处还可以往下运行?
  29.     RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
  30.     RCC_RTCCLKCmd(ENABLE);
  31.     RTC_WaitForSynchro();
  32. }
复制代码


收藏 2 评论14 发布时间:2017-2-23 22:10

举报

14个回答
freeelectron 回答时间:2017-2-24 08:37:34
1.时钟配置看不出说明问题
2.LSE启振后肯定可以用示波器看
3.楼主的代码里面读的是RTC_BKP_DR0,而写得是RTC_BKP_DR10?

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

ts2000 回答时间:2017-3-17 08:30:01
换个晶振试试?这种晶振比较容易坏。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

无薪税绵 回答时间:2017-3-17 08:35:25
如果硬件正常的话,晶振肯定会起振的。

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

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

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

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

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

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

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

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

胤幻1988 回答时间:2017-3-17 10:28:14
这种情况多为硬件故障,ST的如果要求很严格,怕出错,我一次性直接用有源晶振~

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

cldym 回答时间:2017-3-17 12:02:14
换个晶振试试?这种晶振比较容易坏。
中山无雪 回答时间:2017-3-17 12:12:12
STM32对RTC晶振的选择很严格,有一份使用说明中有说明,自己找找看看

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版