STM32
直播中

刘丽菲

8年用户 986经验值
私信 关注
[问答]

STM32F103C8T6时钟RTC每次启动变慢1s是为什么?

本人使用STM32F103C8T6自身的RTC时钟制作了一个时钟定时器,运行正常,但是发现一个问题:每次上电启动10次,大约会变慢大约9~10s。我的程序模板使用STM32CubeMX自动生成,并使用了HAL库。RTC的初始化函数如下:
void MX_RTC_Init(void)
{
  hrtc.Instance = RTC;
  hrtc.Init.AsynchPrediv = RTC_AUTO_1_SECOND;
  hrtc.Init.OutPut = RTC_OUTPUTSOURCE_NONE;
  HAL_RTC_Init( hrtc);
}

怀疑是HAL_RTC_Init( hrtc)初始化的时候,重新设定RTC_PRL,暂停了时钟的counter计数?
于是我修改程序,在启动时检查BKP寄存器的数值,第一次启动运行HAL_RTC_Init( hrtc),并标记BKP寄存器。第二次以后启动以后,运行
HAL_StatusTypeDef HAL_RTC_Init2(RTC_HandleTypeDef *hrtc)
{
  //uint32_t prescaler = 0;
  /* Check input parameters */
  if(hrtc == NULL)
  {
     return HAL_ERROR;
  }
  /* Check the parameters */
  assert_param(IS_RTC_ALL_INSTANCE(hrtc->Instance));
  assert_param(IS_RTC_CALIB_OUTPUT(hrtc->Init.OutPut));
  assert_param(IS_RTC_ASYNCH_PREDIV(hrtc->Init.AsynchPrediv));
  if(hrtc->State == HAL_RTC_STATE_RESET)
  {
    /* Allocate lock resource and initialize it */
    hrtc-> Lock = HAL_UNLOCKED;
    /* Initialize RTC MSP */
    HAL_RTC_MspInit(hrtc);
  }
    hrtc->State = HAL_RTC_STATE_READY;
    return HAL_OK;
}
HAL_RTC_Init2( hrtc)是在原来HAL库里HAL_RTC_Init( hrtc)的基础上,我自己修改创建的。其删除了设置RTC_PRL的内容。上电起动10次后,仍然变慢4~5s。
实在不知道还要如何改写,求助高手!



回帖(1)

王兰

2024-5-13 17:33:53
STM32F103C8T6的RTC时钟变慢可能是由多种原因导致的。在您提供的代码中,我注意到了几个可能的问题。以下是一些建议和解决方案:

1. 检查RTC时钟源:

确保您已经正确设置了RTC时钟源。STM32F103C8T6的RTC时钟源可以是LSI、LSE或HSE。在STM32CubeMX中,您可以在时钟配置中设置RTC时钟源。通常,LSI和LSE的精度较低,可能导致RTC时钟变慢。如果可能,请使用HSE作为RTC时钟源。

2. 检查RTC预分频器设置:

在您的代码中,您使用了`RTC_AUTO_1_SECOND`作为异步预分频器的值。这意味着预分频器的值将自动设置为产生1秒的周期。然而,这可能会导致一些误差,特别是在使用LSI或LSE时。您可以尝试手动设置预分频器的值,以减少误差。

3. 检查RTC中断:

确保您已经正确处理了RTC中断。如果您使用了RTC的定时器功能,那么在每次定时器溢出时,您需要重新加载定时器值。否则,RTC时钟可能会变慢。

4. 检查电源管理:

确保您的STM32F103C8T6在低功耗模式下运行时,RTC仍然可以正常工作。在低功耗模式下,某些时钟源(如LSI)可能会停止工作,导致RTC时钟变慢。您可以尝试在低功耗模式下使用LSE或HSE作为RTC时钟源。

5. 检查外部因素:

确保没有外部因素影响RTC时钟的精度。例如,温度变化、电源波动等都可能导致RTC时钟变慢。

6. 使用外部RTC模块:

如果上述方法都不能解决问题,您可以考虑使用外部RTC模块,如PCF85263或DS3231。这些模块通常具有更高的精度和稳定性。

总之,要解决STM32F103C8T6的RTC时钟变慢问题,您需要检查时钟源、预分频器设置、中断处理、电源管理以及外部因素。如果问题仍然存在,您可以考虑使用外部RTC模块。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分