本帖最后由 coderdd 于 2017-2-3 20:19 编辑
由于使用了stm8s系列单片机,本以为内部自带RTC,结果没有啊,所以得用软件仿真出来。这两天忙着写逻辑,没时间搞,只用了内部的16M搞的一个timer4定时器模拟走秒。结果发现偏差有点大,好像也受温度影响。十几分钟差了好几秒了。理想的是三四天差个30秒之内还是可以接受的。想问下,是否有可行的办法。因为主板已经确定,无法外接rtc模块,只能从外部晶振和内部晶振入手了。下面的是我用内部16M定时器写的:
void Time4_Init(void)
{
TIM4_TimeBaseInit(TIM4_PRESCALER_128, 124);
TIM4_PrescalerConfig(TIM4_PRESCALER_128, TIM4_PSCRELOADMODE_IMMEDIATE);
TIM4_ARRPreloadConfig(ENABLE);
TIM4_ClearFlag(TIM4_FLAG_UPDATE);
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
TIM4_Cmd(ENABLE);
}
//13分钟,误差3秒,无补偿
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
{
if(tm4_cout++>1000)
{
tm4_cout=0;
timeSource++;
tm4_syscout++;
}
TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
}
1.看到部分资料说,rtc模块都是用32.768k的频率,那么是否模拟这个走秒的是否也需要用这个频率才最准确?
2.有源晶振精度>无源晶振精度>单片机内部晶振精度。这个是我的猜测,不知是否正确,那么是否外接有源的晶振最好,有源的是否也会有温漂?
3.模拟时间程序上是否有规范的地方,定时器用timer1,2,3,4是否有区别,写法有没有需要注意的地方?
4.如果用32.768k晶振最准确,那么主程序和定时器的时钟源能否为2个,因为主程序肯定要用16M的了。
以上问题回答有作用的,小弟把过年抢的小红包奉献出来,一共也就二十多块钱,到时候私信发。
|