OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10354|回复: 9

RTC的LSE不起振之谜

[复制链接]

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-1-24
在线时间
0 小时
发表于 2015-9-26 00:05:22 | 显示全部楼层 |阅读模式
5金钱
我是按照STM32F4官方库的例程改的,当时钟源为LSI的时候可以正常的初始化,正常的读时间,但是一旦用了LSE始终之后初始化就会失败,RTC_Init(&RTC_InitStructure)返回值是ERROR,请问一下为什么,哦,对了,配置HSE也是不好使。下面贴源码:
void RTC_Config(void)
{
RTC_TimeTypeDef  RTC_TimeStructure;
RTC_InitTypeDef  RTC_InitStructure;
RTC_AlarmTypeDef RTC_AlarmStructure;

__IO uint32_t uwAsynchPrediv = 0xFF;
__IO uint32_t uwSynchPrediv  = 0x7F;

RTC_DateTypeDef RTC_DateStructure;
  
  /* Enable the PWR clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

  /* Allow access to RTC */
  PWR_BackupAccessCmd(ENABLE);

// RCC_LSICmd(ENABLE);
RCC_LSEConfig(RCC_LSE_ON);

  /* Wait till LSI is ready */  
//  while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
//  {
//  }
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
  {
  }
  /* Select the RTC Clock Source */
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
RCC_RTCCLKCmd(ENABLE);

//????????
  RTC_WaitForSynchro();
  
  /* Configure the RTC data register and RTC prescaler */
  RTC_InitStructure.RTC_AsynchPrediv = uwAsynchPrediv;
  RTC_InitStructure.RTC_SynchPrediv = uwSynchPrediv;
  RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;
//  RTC_Init(&RTC_InitStructure);
if(!RTC_Init(&RTC_InitStructure))
{
printf("init failed ");
}
  
//  /* Set the alarm 05h:20min:30s */
//  RTC_AlarmStructure.RTC_AlarmTime.RTC_H12     = RTC_H12_AM;
//  RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours   = 0x00;
//  RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes = 0x00;
//  RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds = 0x00;
//  RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x24;
//  RTC_AlarmStructure.RTC_AlarmDateWeekDaySel   = RTC_AlarmDateWeekDaySel_Date;
//  RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay;
//  
//  /* Configure the RTC Alarm A register */
//  RTC_SetAlarm(RTC_Format_BCD, RTC_Alarm_A, &RTC_AlarmStructure);
//  
//  /* Enable RTC Alarm A Interrupt */
//  RTC_ITConfig(RTC_IT_ALRA, ENABLE);
//  
//  //????????A
//  RTC_AlarmCmd(RTC_Alarm_A, ENABLE);
//  
// //????????A±ê????
//  RTC_ClearFlag(RTC_FLAG_ALRAF);
  
  /* Set the date: Friday January 11th 2013 */
  RTC_DateStructure.RTC_Year = 0x15;
  RTC_DateStructure.RTC_Month = RTC_Month_September;
  RTC_DateStructure.RTC_Date = 0x24;
  RTC_DateStructure.RTC_WeekDay = RTC_Weekday_Thursday;
//  RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure);
if(!RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure))
{
printf("SetDate error");
}
  
  /* Set the time to 05h 20mn 00s AM */
  RTC_TimeStructure.RTC_H12     = RTC_H12_AM;
  RTC_TimeStructure.RTC_Hours   = 0x23;
  RTC_TimeStructure.RTC_Minutes = 0x40;
  RTC_TimeStructure.RTC_Seconds = 0x00; 
  
//  RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);  
if(!RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure))
{
printf("SetTime error");
}
  
  /* Indicator for the RTC configuration */
  RTC_WriteBackupRegister(RTC_BKP_DR0, 0x15f3);

}
int main(void)
{
RTC_DateTypeDef RTC_DateTypeInstructure; 
RTC_TimeTypeDef RTC_TimeTypeInstructure;

systickinit();

// usart3config();
//
// usart2config();
//
// uart4config();

usart1config();


if(RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x12f3)
{
RTC_Config();
printf("????RTC");
}
else
{
while(1)
{
delay(1000);
RTC_GetDate(RTC_Format_BCD,&RTC_DateTypeInstructure);
RTC_GetTime(RTC_Format_BCD,&RTC_TimeTypeInstructure);
printf("20%-2.2X?ê %X?? %X?? ????%X %X???± %X·? %X?? \r\n",RTC_DateTypeInstructure.RTC_Year, 
RTC_DateTypeInstructure.RTC_Month,RTC_DateTypeInstructure.RTC_Date,RTC_DateTypeInstructure.RTC_WeekDay,
RTC_TimeTypeInstructure.RTC_Hours,RTC_TimeTypeInstructure.RTC_Minutes,RTC_TimeTypeInstructure.RTC_Seconds);
}
}
while(1)
{
delay(1000);
RTC_GetDate(RTC_Format_BCD,&RTC_DateTypeInstructure);
RTC_GetTime(RTC_Format_BCD,&RTC_TimeTypeInstructure);
printf("20%-2.2X?ê %X?? %X?? ????%X %X???± %X·? %X?? \r\n",RTC_DateTypeInstructure.RTC_Year, 
RTC_DateTypeInstructure.RTC_Month,RTC_DateTypeInstructure.RTC_Date,RTC_DateTypeInstructure.RTC_WeekDay,
RTC_TimeTypeInstructure.RTC_Hours,RTC_TimeTypeInstructure.RTC_Minutes,RTC_TimeTypeInstructure.RTC_Seconds);
}
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-9-26 09:09:37 | 显示全部楼层
估计你的外部32.768KHz晶振有问题,或者电路有问题,可以往这个方向去查查
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

10

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
338
金钱
338
注册时间
2015-1-24
在线时间
55 小时
发表于 2015-9-26 10:11:21 | 显示全部楼层
该晶振如果有电容的话会不起振,,上次拆掉就可以了
学无止境
回复

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-1-24
在线时间
0 小时
 楼主| 发表于 2015-9-26 11:36:29 | 显示全部楼层
回复【2楼】八度空间:
---------------------------------
回复【3楼】n85gzj:
---------------------------------
怎么?还不能加电容?一般的晶振两个引脚都会接电容啊
回复

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-1-24
在线时间
0 小时
 楼主| 发表于 2015-9-26 17:29:16 | 显示全部楼层
回复【4楼】杨亦杰:
---------------------------------
刚刚初始化成功,电池扣掉再放上去初始化就成功了,我用的板子和探索者比起来VBAT到电池之间少了两个二极管,这可能是原因,但是,,,但是,,,初始化完之后RTC时钟走的速度几乎是普通时钟速度的两倍,这又是什么幺蛾子?
回复

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-1-24
在线时间
0 小时
 楼主| 发表于 2015-9-26 18:29:02 | 显示全部楼层
加了精确校准函数之后就好了,但是例程中并没有这一项啊,
回复

使用道具 举报

81

主题

1002

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1876
金钱
1876
注册时间
2014-9-10
在线时间
208 小时
发表于 2015-9-28 16:25:47 | 显示全部楼层
stm32f1 rtc天阴下雨时不容易起振的讨论网上不少。
难道你用f4也存在这个现象吗?
小小蜗牛
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-9-28 21:05:23 | 显示全部楼层
直接下载我们例程试试吧.
stm32f4的RTC,个人觉得比F103的要好起振一点.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-1-24
在线时间
0 小时
 楼主| 发表于 2015-10-5 23:16:42 | 显示全部楼层
回复【7楼】jiutianshenjian:
---------------------------------
嗯哪
回复

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2015-1-24
在线时间
0 小时
 楼主| 发表于 2015-10-5 23:17:02 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
哎,各种不好使
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 09:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表