很早就从某国产芯片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();


        //秒计时  
    }    

//