请教stm8定时器不准且一致性不好的问题

2019-12-25 18:46发布

单片机是stm8S003F3,内部RC16M时钟,用的是TIM1,两块板子同一个程序,定时时间有误差,且不是同一块板子还不一样,如10ms定时,一块板子测出来是9.9ms,另一块板子测出来是10.1ms。
不知道是哪里的问题,怀疑是不是内部RC导致的,大家有没有遇到过,还有其它什么原因。程序如下


void bsp_ConfgiSysClk(SYS_CLK_E _iSysClk)
{
  if (_iSysClk == HSI_16M)
  {
    /* 自动切换, 切换到内部高速时钟HSI, 禁止系统时钟中断, 关闭当前的时钟源  */
    CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
    CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);  /* 设置内部高速RC时钟HSI为时钟源,分频系数为1 */
    while (CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == RESET);        /* 等待HSI时钟稳定 */
  }
}

void TIM1_Config(void)
{
  TIM1_TimeBaseInit(15, TIM1_COUNTERMODE_UP, 999, 0);
  TIM1_SetCounter(0);/* 将计数器初值设为0 */
  TIM1_ARRPreloadConfig(DISABLE);        /* 预装载不使能 */
  TIM1_ITConfig(TIM1_IT_UPDATE , ENABLE);        /* 计数器向上计数/向下计数溢出更新中断 */
  TIM1_Cmd(ENABLE);                        /* 使能TIM1 */
}

INTERRUPT_HANDLER(TIM1_UPD_OVF_TRG_BRK_IRQHandler, 11)
{

  TIM1_ClearITPendingBit(TIM1_IT_UPDATE);
   TOGGLE_LED;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。