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

Enter_RTC_InitMode超时(跟纽扣电池的安装顺序有关?)

[复制链接]
uagood 提问时间:2023-1-17 10:51 / 已解决
以前几次生产时,都是先烧写程序(使用离线烧写器,不是烧片)后安装纽扣电池,然后生产测试,设置时间,没问题。
最近临近春节,工厂缺人,修改了生产流程,先安装纽扣电池后烧写程序,然后设置时间就百分百出错。出错的原因是Enter_RTC_InitMode返回超时。扣掉纽扣电池再装回去,上电就好了。这是什么原因?
时间设置函数:
/*##-1- Disable RTC registers write protection ############################*/
  LL_RTC_DisableWriteProtection(RTC);

  /*##-2- Enter in initialization mode ######################################*/
  if (Enter_RTC_InitMode() != RTC_ERROR_NONE)   
  {
          _say_("Enter_RTC_InitMode Error\r\n");
        Voice_Play(VOICE_FAIL_SOUND, 0);
  }

  /*##-3- Configure the Date ################################################*/
  /* Set Date: Monday March 31th 2015 */
  LL_RTC_DATE_Config(RTC, Settime.tm_wday, __LL_RTC_CONVERT_BIN2BCD(Settime.tm_mday), __LL_RTC_CONVERT_BIN2BCD(Settime.tm_mon), __LL_RTC_CONVERT_BIN2BCD(Settime.tm_year));

  /*##-4- Configure the Time ################################################*/
  /* Set Time: 11:59:55 PM*/
  LL_RTC_TIME_Config(RTC, LL_RTC_TIME_FORMAT_AM_OR_24, __LL_RTC_CONVERT_BIN2BCD(Settime.tm_hour), __LL_RTC_CONVERT_BIN2BCD(Settime.tm_min), __LL_RTC_CONVERT_BIN2BCD(Settime.tm_sec));

  /*##-5- Exit of initialization mode #######################################*/
  if (Exit_RTC_InitMode() != RTC_ERROR_NONE)   
  {
          _say_("Exit_RTC_InitMode Error\r\n");
        Voice_Play(VOICE_FAIL_SOUND, 0);
  }

  /*##-6- Enable RTC registers write protection #############################*/
  LL_RTC_EnableWriteProtection(RTC);


Enter_RTC_InitMode函数如下:
uint32_t Enter_RTC_InitMode(void)
{
  /* Set Initialization mode */
  LL_RTC_EnableInitMode(RTC);

  RTC_Timeout = RTC_TIMEOUT_VALUE;

  /* Check if the Initialization mode is set */
  while (LL_RTC_IsActiveFlag_INIT(RTC) != 1)
  {
    if (LL_SYSTICK_IsActiveCounterFlag())
    {
      RTC_Timeout --;
    }
    if (RTC_Timeout == 0)
    {
      return RTC_ERROR_TIMEOUT;
    }  
  }

  return RTC_ERROR_NONE;
}

收藏 评论3 发布时间:2023-1-17 10:51

举报

3个回答
xmshao 最优答案 回答时间:2023-1-17 15:10:25
结合你的问题描述,我认为这个Enter_RTC_InitMode()初始化代码本身不会有啥问题。


另外,RTC时钟设置跟这个纽扣也没有多少关系,它毕竟只是个备份电源。


难道是这个纽扣的 先上和 后上动作 对外围其它电路造成了影响?


目前我只是怀疑到LSE这块是否受到了影响。
uagood 回答时间:2023-1-17 16:12:35
xmshao 发表于 2023-1-17 15:10
结合你的问题描述,我认为这个Enter_RTC_InitMode()初始化代码本身不会有啥问题。

因为工厂使用离线烧写器,不是烧片。我觉得是离线烧写的时候,片内固件开始起作用,芯片已经开始工作,此时芯片内部RTC的某些东西可能有改变。做这个推测基于两点:1、拿掉纽扣电池再装上去再开机就正常;2、加入测试代码,当出现这个错误时,对RTC部分重新进行初始化,再写时间也就正常了
butterflyspring 回答时间:2023-1-20 18:13:10
纽扣电池的安装应该和复位有关系,猜测你的备份域也一起复位。 所以库函数通常没问题,那么有可能和逻辑会有关系,比如是否使用了备份域的内容作为判断条件等。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版