一、问题背景
最近在调试一个数据采集项目,采集板需要每隔一秒将原始数据打包,每个数据包包头包含有打包时刻的时间戳,如“S20191120152020”。采集时钟源采用的是MCU硬件定时器,通过外部高精度的8MHz分频得到,所以精确足够。但是数据包包头的时间戳是使用STM32 的RTC外设获得,实测长时间运行后,RTC平均误差一天快一秒左右。网上搜索发现,大家基本都有遇到STM32 RTC时钟不准的问题,故特此记录下。
二、解决方法思路
2.1 STM32F4 RTC介绍
RTC的基本功能网上资源很多,所以我这里不做过多的介绍,这里主要介绍精度以及校准部分。我使用的RTC时钟源采用外部低速的32.768kHz晶振,通过异步分频器的128分频和同步分频器的256分频,最终得到ck_spre = 32768/128/256=1Hz。
实时时钟 (RTC) 是一个独立的 BCD 定时器/计数器。 RTC 提供一个日历时钟、两个可编程
闹钟中断,以及一个具有中断功能的周期性可编程唤醒标志。 RTC 还包含用于管理低功耗模
式的自动唤醒单元。此外,还可以使用数字校准功能对晶振精度的偏差进行补偿。
数字校准电路(周期性计数器调整)
— 精度为 5 ppm
— 精度为 0.95 ppm,在数秒钟的校准窗口中获得
--stm32f4 reference manual<