國產藍芽SOC晶片ST17H66的時鐘問題分析
阿新 • • 發佈:2022-04-12
很早就從某國產晶片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(); //秒計時 } //