很早就从某国产芯片FAE处听过这么一句话“毕竟是国产IC”,
一款蓝牙产品需要做闹钟功能,BOSS测试,一周有5分钟左右偏差
设计时,没太在意时钟问题,想着BLE的时钟很严格,时间不会差的很过分。
直接用系统时钟做计时器了,1S重复中断,结果翻车了。
系统16Mhz的晶振,1S的精准计时都做不到,
项目进度优先,底层寄存器之类的,完全封闭的,无法“刨根问底”。
烧录几个机器,跑下一致性,要数据一致,就直接每3小时快进5秒,控制一周误差10S内。
//定时定义 osal_start_reload_timer(user_task_id,PMW_LIGHT_TIMER_60S_EVT,1000); //中断处理 f_xx() { //实际测量时间,15个小时,差了25秒,和500PPM的理论一致。 //精度测量 //用硬件Timer测量,2991557 3991602 有 0.2%的误差 // 这个应该是最可信的,但是和实际时间对不上, LOG("yyyyy--%d %08x\n", AP_TIM3->CurrentCount-lk, AP_TIM3->CurrentCount); lk = AP_TIM3->CurrentCount;; //这个和实际一致 1598 误差0.00125左右 LOG("yyyyy1--%d\n", hal_systick()-li); li = hal_systick(); //这个惨不忍睹,33275,33265.. 和理论32768误差能有0.016 LOG("yyyyy2--%d\n", rtc_get_counter()-lj); lj = rtc_get_counter(); //秒计时 } //