打印

求教:STM32 RTC容易导致死机问题

[复制链接]
18313|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhwxc|  楼主 | 2008-8-14 16:46 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
    
    在实际使用STM32的过程中,发现实时时钟经常不能完成初始化,程序死在时钟初始化的等待循环中,发生的几率大概超过5%。而且不是固定的哪一个机器,每个机器都有可能开机后进入死循环。重新开关几次机,又可能正常了,以后可能就很难再发生。这个问题非常令人烦恼,因为具有很大的随机性,既难以判断问题,又不好测试是否已经解决。可以肯定不是32768HZ时钟晶振的问题,同一批晶振,在其它MCU或时钟芯片上批量使用一直都是正常的。

void RTC_Config(void)
{
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);
  
  PWR_BackupAccessCmd(ENABLE);  /* Allow access to BKP Domain */

  BKP_DeInit(); /* Reset Backup Domain */

  RCC_LSEConfig(RCC_LSE_ON);    /* Enable LSE */
  
  while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET);/* Wait till LSE is ready */  (可能的死循环点)

  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);  /* Select LSE as RTC Clock Source */

  RCC_RTCCLKCmd(ENABLE);/* Enable RTC Clock */

  RTC_WaitForSynchro();(可能的死循环点)

  /* Wait until last write operation on RTC registers has finished */
  RTC_WaitForLastTask();(可能的死循环点)

  /* Enable the RTC Second */  
  RTC_ITConfig(RTC_IT_SEC, ENABLE);

  /* Wait until last write operation on RTC registers has finished */
  RTC_WaitForLastTask();
  
  RTC_SetPrescaler(32767); /* RTC period = RTCCLK/RTC_PR = (32.768 KHz)/(32767+1) */
  
  /* Wait until last write operation on RTC registers has finished */
  RTC_WaitForLastTask();
}
沙发
zhwxc|  楼主 | 2008-8-16 09:39 | 显示全部楼层

再次声明:应该不是晶振的问题

同一批晶振,在S3C44B0X(ARM7)和PCF8563(专用时钟芯片)上一直都是很正常的,极个别不起振也是晶振的问题,换后就正常了,但从没有出现过现在这样随机出现不能工作的问题。

目前希望能尽快确定是STM32的RTC时钟难以起振还是软件方面的时序有问题,如果是软件方面的问题,比较好解决。否则ST就应该提供更详细的RTC时钟方面的参考设计,特别是对晶振的具体要求。

这个问题难以测试,我们生产中经常出现第一遍测试全部通过,第2次重新开机测试时又发现有1/3开不了机(原因就是死在RTC启动的等待循环中),关机后,反复开机多次又会有几台能正常工作了。随机性是这个问题难以判断和处理的地方。说不准哪一台在投运后会出现开机死机的问题,每一台都有可能。

使用特权

评论回复
板凳
zhwxc|  楼主 | 2008-8-16 09:44 | 显示全部楼层

再次声明2:应该不是晶振的问题

同一批晶振,在S3C44B0X(ARM7)和PCF8563(专用时钟芯片)上一直都是很正常的,极个别不起振也是晶振的问题,换后就正常了,但从没有出现过现在这样随机出现不能工作的问题。

这2种设备的使用台数都超过1000台,样本足够大,应该能说明晶振是没有什么问题的,至少没有不稳定的情况。

使用特权

评论回复
地板
zhwxc|  楼主 | 2008-8-16 14:09 | 显示全部楼层

问题可能在晶振的参数上

上面的参数我在手册上怎么找不到?我这里的手册上并没有这么详细,也根本没有提到过不能使用12.5p负载电容的晶振。我查了一下,我们一直用的都是负载电容12.5p的晶振,但是其它IC上都从来没有出过这种问题。ST为什么要做这样的限制?而且手册上也不说清楚。

使用特权

评论回复
5
zhwxc|  楼主 | 2008-8-16 14:17 | 显示全部楼层

我用的是版本7的手册,2008年5月更新的

我用的是版本号为7的手册,2008年5月更新的

使用特权

评论回复
6
zhwxc|  楼主 | 2008-8-18 09:28 | 显示全部楼层

原来是刚刚更新的资料,ST这次确实比较害人

ST最新更新的资料(2008年7月)倒是写得很详细,但是以前版本的资料根本没有说清楚,大概是全世界很多用户都遇到类似问题,ST才在最新资料里给出了详细的参考参数。ST这个设计确实是一大败笔,极容易导致用户使用时出现问题。32768晶振最普遍的就是12.5p负载电容的类型,我们用过的其它所有的IC都可以支持。6P负载电容的型号市场上还不容易买到,而且这样还导致库存上配置2种型号的32768晶振。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

21

帖子

1

粉丝