[STM8] 中断中读出来的时间偏差特别大

[复制链接]
1430|25
 楼主| zwll 发表于 2021-5-5 14:42 | 显示全部楼层 |阅读模式
目前在用STM8S的定时器3加外部引脚的中断来测量高低电平的时间。思路是:
1)外部引脚设置为高低电平都进入中断;
2)设置定时器时钟为1Mhz
3)在进入外部中断的时候读取定时器的计数值后清除重新计数。读取的计数值即是高电平/低电平时间,单位us

定时器的配置如下:
  CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER3,ENABLE);
  TIM3_TimeBaseInit(TIM3_PRESCALER_16, 32000);   // 1Mhz clock,32ms Cycle
  TIM3_SetCounter(0);
  TIM3_ITConfig(TIM3_IT_UPDATE, ENABLE);
  TIM3_ClearFlag(TIM3_FLAG_UPDATE);
  TIM3_Cmd(DISABLE);

中断服务程序中:

/**
  * @brief External Interrupt PORTD Interrupt routine.
  * @param  None
  * @retval None
  */
INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)
{
  /* In order to detect unexpected events during development,
     it is recommended to set a breakpoint on the following instruction.
  */
   
  if ((GPIO_ReadInputData(GPIOD) & GPIO_PIN_0) == 0x00)
  {
      TIM3_Cmd(DISABLE);
      SignalHigh = TIM3_GetCounter();
      TIM3_SetCounter(0);
      TIM3_Cmd(ENABLE);
  }
  else
  {
      TIM3_Cmd(DISABLE);
      SignalLow = TIM3_GetCounter();
      TIM3_SetCounter(0);
      TIM3_Cmd(ENABLE);
  }
}

中断中读出来的时间偏差特别大,100us左右的电平读出来将近1700,不知道是什么原因
dingy 发表于 2021-5-5 14:44 | 显示全部楼层

还有什么现象?能再详细描述下吗?
 楼主| zwll 发表于 2021-5-5 14:46 | 显示全部楼层
按上面timer3的配置测试的32ms定时是准的
zhanghqi 发表于 2021-5-5 14:47 | 显示全部楼层
说明时钟配置是对的
 楼主| zwll 发表于 2021-5-5 14:49 | 显示全部楼层
不知道为什么在中断里读的计数值就不对
zhenykun 发表于 2021-5-5 14:51 | 显示全部楼层
TIM3_Cmd(DISABLE);
       SignalHigh = TIM3_GetCounter();
       TIM3_SetCounter(0);
       TIM3_Cmd(ENABLE);

很可能是执行这段语句的时间就不止100us了。
chuxh 发表于 2021-5-5 14:53 | 显示全部楼层
这个外部中断的间隔有点短呀,你加上试试
dingy 发表于 2021-5-5 14:54 | 显示全部楼层
嗯,比如外部中断间隔1ms
zhaoxqi 发表于 2021-5-5 14:57 | 显示全部楼层
还是用捕获功能吧
zhanghqi 发表于 2021-5-5 14:59 | 显示全部楼层
嗯,记得stm的进入中断就十几个周期了
 楼主| zwll 发表于 2021-5-5 15:04 | 显示全部楼层
换一种方式也可以
 楼主| zwll 发表于 2021-5-5 15:06 | 显示全部楼层
但是我还是要弄清为什么这种方式不行
juventus9554 发表于 2021-5-5 15:08 | 显示全部楼层
错哪了
 楼主| zwll 发表于 2021-5-5 15:09 | 显示全部楼层
偏差太大了,肯定是有地方不对的。
huangchui 发表于 2021-5-5 15:12 | 显示全部楼层
试试不用库函数
wyjie 发表于 2021-5-5 15:14 | 显示全部楼层
直接操作寄存器
huanghuac 发表于 2021-5-5 15:16 | 显示全部楼层
也就不到10条语句
 楼主| zwll 发表于 2021-5-5 15:18 | 显示全部楼层
不可能有100us时间
 楼主| zwll 发表于 2021-5-5 15:20 | 显示全部楼层
何况差的时间是1000多us
 楼主| zwll 发表于 2021-5-5 15:22 | 显示全部楼层
没有人碰到过这种情况吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

885

主题

11314

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部