很早就從某國產芯片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(); //秒計時 } //