STM32H743 RTC精密数字校准 深度剖析

一、问题

       项目中数据报文收到的RTC时间总是会慢一些,经过实际几天的测试得出结论:24小时要慢5S左右。根据手册我了解到可以有误差但不会差这么多,所以进行了如下分析并解决问题。

二、分析

1.影响RTC准确性的因素罗列

· 硬件基础误差(也就是待校准部分)                -- 校准解决

· 软件复位误差(复位一次大概会慢不到1S)    -- 校准解决

· 晶振受温度影响带来的误差                              -- 动态温度补偿

下面针对各项误差进行逐一解决

2.RTC配置-STM32CubeMX

        我使用的RTC时钟源采用外部低速的32.768kHz晶振,通过异步分频器的128分频和同步分频器的256分频,最终得到ck_spre = 32768/128/256=1Hz。

STM32H743 RTC精密数字校准 深度剖析_第1张图片

3.RTC框图

STM32H743 RTC精密数字校准 深度剖析_第2张图片

        由上图可知,RTC有一个精密校准功能,同时RTC可以输出RTC_CALIB,也就是我们在配置界面所添加的Calibration功能,配置完后,可以在输出引脚用示波器测量频率1 Hz 时钟输出。那么接下来我们着重说一下配置精密校准方式,也是困惑我好几天的一个点。

3.RTC精密数字校准

        精密校准就是直接在RTC的时钟源,对一个周期内(一般为32s)的RTC时钟个数,进行增加和/或减少单独的 RTCCLK 脉冲,从而实现频率校正。

STM32H743 RTC精密数字校准 深度剖析_第3张图片

       阅读参考手册中的一些内容,第一遍我并没有看明白啥意思,然后我开始研究相关函数,经过查找,确定了两个有关系的函数:平滑校准函数和同步移位控制函数。

第一个函数:平滑校准函数

研究这个函数时我没读明白英文的意思,其实就是不明白后边两个参数到底要干嘛,于是我参考上图参考手册的说明,明白了大概说的是一个意思:可调块,也可调慢。这正是我想要的功能,那接下来就是研究如何调。继续阅读我理解到:

第三个参数(CALP):SmoothCalibPlusPulses ,选SET就是调快512个RTCCLK,选RESET就是不调快。

第四个参数(CALM):SmoothCalibMinusPulsesValue,这个参数就是需要调慢的具体数值,取值范围是0-0x1FF。

/**
  * @brief  Set the Smooth calibration parameters.
  * @param  hrtc RTC handle
  * @param  SmoothCalibPeriod Select the Smooth Calibration Period.
  *          This parameter can be can be one of the following values :
  *             @arg RTC_SMOOTHCALIB_PERIOD_32SEC: The smooth calibration period is 32s.
  *             @arg RTC_SMOOTHCALIB_PERIOD_16SEC: The smooth calibration period is 16s.
  *             @arg RTC_SMOOTHCALIB_PERIOD_8SEC: The smooth calibration period is 8s.
  * @param  SmoothCalibPlusPulses Select to Set or reset the CALP bi

你可能感兴趣的:(单片机-ST,stm32,嵌入式硬件,RTC校准,精密数字校准,STM32H743)