请教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条回答
snoopyzz
1楼-- · 2019-12-27 14:27
LVmcu 发表于 2017-6-20 12:44
内部的本来就不准,当然你也可以再校准下会好的。

我先不考虑同一块板子时钟自己会变化的情况,如果每块板子都要校,是怎么校准的
NIC
2楼-- · 2019-12-27 18:59
 精彩回答 2  元偷偷看……
LVmcu
3楼-- · 2019-12-27 20:23
请教一下,规格书这样说,VDD=5V, TA=25℃的时候,最小值为-2.5 最大值为1.3。是不是可以这样理解,  10MS定时的话,最小为 9.75ms ,最大为10.13ms??  是不用我理解错了?
52HLX
4楼-- · 2019-12-27 23:09
貌似还需要除以分频因子,8M 1%的hsi如果分频后输出1M的脉冲误差应该只有0.125%
aduecho
5楼-- · 2019-12-27 23:53
正负1%精度都忍受不了那你设计时候就要考虑晶振啊
lsfsxfljj
6楼-- · 2019-12-28 04:11
我看了怎么想笑啊,哈哈哈哈

一周热门 更多>