前言:
CH592芯片在使用蓝牙外部32K精度比较高(根据选择的外部32.768K晶体,精度一般在20ppm以内)。直接使用内部32K不校准误差约为百分之二,校准后可以做到0.1%-0.3%精度。
使用外部32K需要消耗一颗晶振的物料,同时芯片的相应GPIO会被占用。如果对于32K的误差要求不是很高,可以直接选择使用内部低频晶振。
对于内部低频晶振本身的误差无法消除,但是基于32K的功能如万年历可以进行时间的校准(此处指的是外部传入时间,对RTC进行重新设置)。
原理:
对万年历进行校准主要是对显示出来的时间进行处理。先将北京时间传递进程序中的BUF中存储,然后跟万年历的时间做对比,对比查看时间是否一致,如北京时间是10点30分,万年历显示出来的时间是10点20分,则将时间差值加上当前万年历显示出来的时间。注意:不可以重新初始化RTC时间,这会导致RTC时间错乱,结合蓝牙使用会导致蓝牙断连(直接重新初始化RTC会导致Tmos任务时间错乱,引起任务无法执行,一般建议在复位后在重新初始化RTC)。
总结一下:在设置完RTC后,如果要重新校准时间,则自定义变量,做偏差计算即可。
实际操作:
上述提供的原理性讲解,这里结合蓝牙的功能实现万年历举一个例子:
这里同样设置1s获取一次时间同时打印出来,假设此时的时间已经慢1s,这里通过外部留一个接口手动的添加1s上去。
最终显示慢1s则按下该按键手动添加1s,如图:
注:
不可以重新初始化RTC的时候,即调用RTC_InitTime这个函数,因为蓝牙系统的TMOS任务就是基于RTC运行的,如果初始化RTC,会导致TMOS任务的时间参数被修改,从而导致蓝牙任务时间错乱,最终导致蓝牙断开等现象。
标签:1s,CH592,万年历,CH573,蓝牙,RTC,时间,32K From: https://www.cnblogs.com/debugdabiaoge/p/18165029