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

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

查看全部评分

小小超 回答时间: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

查看全部评分

sting 回答时间:2017-3-17 12:37:04
6pf......
zbber 回答时间:2017-3-17 12:39:31
这种情况多为硬件故障,ST的如果要求很严格,怕出错,我一次性直接用有源晶振~
wenyangzeng 回答时间:2017-3-17 12:58:50
RTC如果有重新配置完成后要再写一次备份寄存器
RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2;

评分

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

查看全部评分

11:493 回答时间:2017-3-17 15:16:59
晶振的两个电容确认正确没有问题,遇到过类似的问题,两个电容原来的8p,更换为6P就好了。

评分

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

查看全部评分

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版