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


    一、问题

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

    二、分析

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

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

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

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

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

    2.RTC配置-STM32CubeMX

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

    3.RTC框图

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

    3.RTC精密数字校准

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

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

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

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

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

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

    1. /**
    2. * @brief Set the Smooth calibration parameters.
    3. * @param hrtc RTC handle
    4. * @param SmoothCalibPeriod Select the Smooth Calibration Period.
    5. * This parameter can be can be one of the following values :
    6. * @arg RTC_SMOOTHCALIB_PERIOD_32SEC: The smooth calibration period is 32s.
    7. * @arg RTC_SMOOTHCALIB_PERIOD_16SEC: The smooth calibration period is 16s.
    8. * @arg RTC_SMOOTHCALIB_PERIOD_8SEC: The smooth calibration period is 8s.
    9. * @param SmoothCalibPlusPulses Select to Set or reset the CALP bi
  • 相关阅读:
    python爬虫,多线程与生产者消费者模式
    pysimpleGui 使用之sg.SaveAs使用
    vue3实现在element Dialog 对话框中预览pdf文件
    Linux编程知识之GLIB的GOption接口函数
    指针学习(五)
    【JavaEE初阶系列】——HTTP协议
    python深入理解super
    2023江西财经大学计算机考研信息汇总
    向日葵远程分辨率过低解决办法
    Flask 项目结构
  • 原文地址:https://blog.csdn.net/sky_Buddha/article/details/134455218