打印
[STM8]

STM8S 定时器加中断测量电平问题

[复制链接]
1493|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ElectronicsX|  楼主 | 2017-2-28 22:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ElectronicsX 于 2017-2-28 23:46 编辑

目前在用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,不知道是什么原因,哪位大侠帮忙看一下,在线等...
沙发
ElectronicsX|  楼主 | 2017-2-28 23:39 | 只看该作者
补充一下:按上面timer3的配置测试的32ms定时是准的,说明时钟配置是对的,不知道为什么在中断里读的计数值就不对......

使用特权

评论回复
板凳
xyz549040622| | 2017-3-1 07:42 | 只看该作者
      TIM3_Cmd(DISABLE);
       SignalHigh = TIM3_GetCounter();
       TIM3_SetCounter(0);
       TIM3_Cmd(ENABLE);

很可能是执行这段语句的时间就不止100us了。这个外部中断的间隔有点短呀,你加上试试,比如外部中断间隔1ms。

使用特权

评论回复
地板
mcu5i51| | 2017-3-1 08:37 | 只看该作者
还是用捕获功能吧,记得stm的进入中断就十几个周期了

使用特权

评论回复
5
ElectronicsX|  楼主 | 2017-3-1 13:35 | 只看该作者
mcu5i51 发表于 2017-3-1 08:37
还是用捕获功能吧,记得stm的进入中断就十几个周期了

换一种方式也可以,但是我还是要弄清为什么这种方式不行,错哪了。偏差太大了,肯定是有地方不对的。

使用特权

评论回复
6
ElectronicsX|  楼主 | 2017-3-1 13:37 | 只看该作者
xyz549040622 发表于 2017-3-1 07:42
TIM3_Cmd(DISABLE);
       SignalHigh = TIM3_GetCounter();
       TIM3_SetCounter(0);

我试过不用库函数,直接操作寄存器,也就不到10条语句,不可能有100us时间。何况差的时间是1000多us

使用特权

评论回复
7
ElectronicsX|  楼主 | 2017-3-1 16:06 | 只看该作者
没有人碰到过这种情况吗?

使用特权

评论回复
8
cyhuaxiang| | 2017-3-1 18:00 | 只看该作者
检测高低电平的时间不是得检测边沿吗?

使用特权

评论回复
9
xiaomi999999| | 2017-3-1 21:15 | 只看该作者
有没有别的中断抢占,中断中用一个引脚输出电平变化,用示波器看看两个信号之间有没有差别

使用特权

评论回复
10
13277120295| | 2019-6-13 17:01 | 只看该作者
老兄你的这个测电平时间弄出来了吗 ? 我现在急需这个 可以向你请教下吗 我的VX 13277120295

使用特权

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

本版积分规则

3

主题

10

帖子

0

粉丝