打印
[STM8]

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

[复制链接]
959|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 | 只看该作者
说明时钟配置是对的

使用特权

评论回复
5
zwll|  楼主 | 2021-5-5 14:49 | 只看该作者
不知道为什么在中断里读的计数值就不对

使用特权

评论回复
6
zhenykun| | 2021-5-5 14:51 | 只看该作者
TIM3_Cmd(DISABLE);
       SignalHigh = TIM3_GetCounter();
       TIM3_SetCounter(0);
       TIM3_Cmd(ENABLE);

很可能是执行这段语句的时间就不止100us了。

使用特权

评论回复
7
chuxh| | 2021-5-5 14:53 | 只看该作者
这个外部中断的间隔有点短呀,你加上试试

使用特权

评论回复
8
dingy| | 2021-5-5 14:54 | 只看该作者
嗯,比如外部中断间隔1ms

使用特权

评论回复
9
zhaoxqi| | 2021-5-5 14:57 | 只看该作者
还是用捕获功能吧

使用特权

评论回复
10
zhanghqi| | 2021-5-5 14:59 | 只看该作者
嗯,记得stm的进入中断就十几个周期了

使用特权

评论回复
11
zwll|  楼主 | 2021-5-5 15:04 | 只看该作者
换一种方式也可以

使用特权

评论回复
12
zwll|  楼主 | 2021-5-5 15:06 | 只看该作者
但是我还是要弄清为什么这种方式不行

使用特权

评论回复
13
juventus9554| | 2021-5-5 15:08 | 只看该作者
错哪了

使用特权

评论回复
14
zwll|  楼主 | 2021-5-5 15:09 | 只看该作者
偏差太大了,肯定是有地方不对的。

使用特权

评论回复
15
huangchui| | 2021-5-5 15:12 | 只看该作者
试试不用库函数

使用特权

评论回复
16
wyjie| | 2021-5-5 15:14 | 只看该作者
直接操作寄存器

使用特权

评论回复
17
huanghuac| | 2021-5-5 15:16 | 只看该作者
也就不到10条语句

使用特权

评论回复
18
zwll|  楼主 | 2021-5-5 15:18 | 只看该作者
不可能有100us时间

使用特权

评论回复
19
zwll|  楼主 | 2021-5-5 15:20 | 只看该作者
何况差的时间是1000多us

使用特权

评论回复
20
zwll|  楼主 | 2021-5-5 15:22 | 只看该作者
没有人碰到过这种情况吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

885

主题

11314

帖子

5

粉丝