硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2881|回复: 9
收起左侧

有人用过STM32F429 -V6的RTC吗?感觉LSE不起振,重起时间会丢。

[复制链接]

2

主题

0

回帖

9

积分

新手上路

积分
9
发表于 2017-10-24 17:25:13 | 显示全部楼层 |阅读模式
1、感觉选择LSE的时候,程序卡在了

  while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
  {
  }
2、选择LSI的时候,程序到是可以运行,但重起的时候(还没断电),时间就丢了。有没有人用过?
代码如下:


void RTC_Config(void)
{
         uint16_t delay;
  RTC_DateTypeDef RTC_DateStructure;
  
  /* Enable the PWR clock */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

  /* Allow access to RTC */
  PWR_BackupAccessCmd(ENABLE);
   
#if defined (RTC_CLOCK_SOURCE_LSI)  /* LSI used as RTC source clock*/
  /* The RTC Clock may varies due to LSI frequency dispersion */   
  /* Enable the LSI OSC */
  RCC_LSICmd(ENABLE);

  /* Wait till LSI is ready */  
  while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)
  {
  }

  /* Select the RTC Clock Source */
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
  
  /* ck_spre(1Hz) = RTCCLK(LSI) /(uwAsynchPrediv + 1)*(uwSynchPrediv + 1)*/
  uwSynchPrediv = 0xFF;
  uwAsynchPrediv = 0x7F;

#elif defined (RTC_CLOCK_SOURCE_LSE) /* LSE used as RTC source clock */
  /* Enable the LSE OSC */
  RCC_LSEConfig(RCC_LSE_ON);

  /* Wait till LSE is ready */  
  while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)
  {
  }
  /* Select the RTC Clock Source */
  RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
  /* ck_spre(1Hz) = RTCCLK(LSE) /(uwAsynchPrediv + 1)*(uwSynchPrediv + 1)*/
  uwSynchPrediv = 0xFF;
  uwAsynchPrediv = 0x7F;

#else
  #error Please select the RTC Clock source inside the main.c file
#endif /* RTC_CLOCK_SOURCE_LSI */
  
  /* Enable the RTC Clock */
  RCC_RTCCLKCmd(ENABLE);

  /* Wait for RTC APB registers synchronisation */
  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);
  
//  /* Enable RTC Alarm A Interrupt */
  RTC_ITConfig(RTC_IT_ALRA, ENABLE);
//  
  
  /* Set the date: Friday January 11th 2013 */
  RTC_DateStructure.RTC_Year = 0x17;
  RTC_DateStructure.RTC_Month = RTC_Month_September;
  RTC_DateStructure.RTC_Date = 0x01;
  RTC_DateStructure.RTC_WeekDay = RTC_Weekday_Friday;
  RTC_SetDate(RTC_Format_BCD, &RTC_DateStructure);
  
  /* Set the time to 05h 20mn 00s AM */
  RTC_TimeStructure.RTC_Hours   = 0x12;
  RTC_TimeStructure.RTC_Minutes = 0x20;
  RTC_TimeStructure.RTC_Seconds = 0x00;
  
  RTC_SetTime(RTC_Format_BCD, &RTC_TimeStructure);   
  
  /* Indicator for the RTC configuration */
  RTC_WriteBackupRegister(RTC_BKP_DR0, 0x32F2);
}
void RTC_CalendarConfig(void)
{
     RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
  if (RTC_ReadBackupRegister(RTC_BKP_DR0) != 0x32F2)
  {  
    /* RTC configuration  */
    RTC_Config();
    /* Display the RTC Time and Alarm */
    RTC_TimeShow();
  }
  else
  {
        RTC_TimeShow();
    /* Check if the Power On Reset flag is set */
    if (RCC_GetFlagStatus(RCC_FLAG_PORRST) != RESET)
    {
      /* Power On Reset occurred     */
    }
    /* Check if the Pin Reset flag is set */
    else if (RCC_GetFlagStatus(RCC_FLAG_PINRST) != RESET)
    {
      /* External Reset occurred */
    }
   
    /* Enable the PWR clock */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);

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

    /* Wait for RTC APB registers synchronisation */
    RTC_WaitForSynchro();

    /* Clear the RTC Alarm Flag */
    RTC_ClearFlag(RTC_FLAG_ALRAF);


    /* Display the RTC Time and Alarm */
    RTC_TimeShow();
  }
}

void RTC_TimeShow(void)
{
  /* Get the current Time */
  RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2017-10-24 17:40:02 | 显示全部楼层
使用V6板子万年历的例子测试下。https://forum.anfulai.cn/forum.php?mod=viewthread&tid=23687

bsp_rtc.c文件开头的宏定义可以切换使用内部LSI或者LSE。



图片:1.png[删除]

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2017-10-24 17:45:24 | 显示全部楼层
刚刚问了下公司那边,是晶振问题,部分晶振的负载电容和CPU不匹配,导致不能正常起振。得换晶振,你要是急需此功能的测试,联系下旺旺,给你换个晶振。
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2017-10-24 19:43:51 | 显示全部楼层
谢谢管理员。用什么型号的晶振?您先告我下型号,我看看我有没有。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2017-10-25 02:48:16 | 显示全部楼层

回 cnsxgh 的帖子

cnsxgh:谢谢管理员。用什么型号的晶振?您先告我下型号,我看看我有没有。 (2017-10-24 19:43) 
明天联系我们旺旺,他们在负责这个事情。[s:130]
回复

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2020-12-25 11:37:31 | 显示全部楼层
我碰到V6开发板的问题现象:
       RTC,断电开机,时间不会跑。用烧录器进入仿真运行就会跑,同样的程序执行一遍烧录也会跑。
这是上电RTC初始化节奏问题吗?

背景确认:开发板裸跑点灯程序,初始化开发板后接着初始化RTC,1秒的延时节奏获取RTC并打印。出现了上述异常现象。

解决措施:main函数进来后,运行一段延时 int t_count = 0xFFFF; while(--t_count);

综合评估的可能:
a.芯片硬件复位延时太短
b.RTC需要稳定的时间太长
c.供电不稳,开机受负载电路影响。

另外,还收集到一个案例:硬件前辈描述调试过程空载出现上述现象,满载的时候没问题。
Releasing your creativity
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2020-12-26 09:53:58 | 显示全部楼层
廷润 发表于 2020-12-25 11:37
我碰到V6开发板的问题现象:
       RTC,断电开机,时间不会跑。用烧录器进入仿真运行就会跑,同样的程序 ...

总的来说,STM32对RTC的起振要求比较苛刻。匹配电容啥的,稍有点问题就不太好使。

另外最好整上RTC 电池,会大大降低RTC问题。
回复

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2020-12-26 14:46:40 | 显示全部楼层
eric2013 发表于 2020-12-26 09:53
总的来说,STM32对RTC的起振要求比较苛刻。匹配电容啥的,稍有点问题就不太好使。

另外最好整上RTC 电 ...

3.检查电池是否断电过(是否RTC初始化过),通过的话直接跳到第4步。
if (BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5)

今天又琢磨了一下这个问题,官网的配置具有缺省值,默认就是整上RTC电池的玩法。
Releasing your creativity
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2020-12-26 15:10:40 | 显示全部楼层
廷润 发表于 2020-12-26 14:46
3.检查电池是否断电过(是否RTC初始化过),通过的话直接跳到第4步。
if (BKP_ReadBackupRegister(BKP_ ...

带上电池可以一定程度上降低RTC问题,现在H7-TOOL就是带着RTC电池的,基本上没出现过RTC起振问题。

还有就是晶振和电容最好是官方指定的。

STM32的振荡器设计指南应用笔记AN2867,中文版和英文版以及强烈推荐的32768晶振型号
https://forum.anfulai.cn/forum.p ... 7673&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

29

主题

514

回帖

606

积分

金牌会员

积分
606
QQ
发表于 2020-12-28 11:53:48 | 显示全部楼层
eric2013 发表于 2020-12-26 15:10
带上电池可以一定程度上降低RTC问题,现在H7-TOOL就是带着RTC电池的,基本上没出现过RTC起振问题。

还 ...

收到。官方匹配
Releasing your creativity
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 21:20 , Processed in 0.050347 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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