请教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;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
20条回答
NIC
1楼-- · 2019-12-26 14:10
不了解内部RC的特性就敢用,后果很严重啊
hdxet
2楼-- · 2019-12-26 18:42
NIC 发表于 2017-6-20 14:03
我这款产品对定时器要求比较高,设计时没考虑到,现在量产后发现这个问题 ...

什么用途,
huangqi412
3楼-- · 2019-12-26 21:00
 精彩回答 2  元偷偷看……
dz20062008
4楼-- · 2019-12-27 02:17
应该没这么大误差, 这已经10%了... 常温下1%精度有的
snoopyzz
5楼-- · 2019-12-27 05:01
snoopyzz 发表于 2017-6-20 17:17
应该没这么大误差, 这已经10%了... 常温下1%精度有的

10ms,测出来10.1ms不就是1%精度吗
NIC
6楼-- · 2019-12-27 08:38
NIC 发表于 2017-6-20 17:31
10ms,测出来10.1ms不就是1%精度吗

呃, 算错了, 惭愧, 那STM8的内部RC不能满足你, 事实上 STM8的内部RC已经算精度不错的了,,,其它MCU的内部RC更惨...10%的都有

一周热门 更多>