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

[复制链接]
1688|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的进入中断就十几个周期了
 楼主| ElectronicsX 发表于 2017-3-1 13:35 | 显示全部楼层
mcu5i51 发表于 2017-3-1 08:37
还是用捕获功能吧,记得stm的进入中断就十几个周期了

换一种方式也可以,但是我还是要弄清为什么这种方式不行,错哪了。偏差太大了,肯定是有地方不对的。
 楼主| 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
 楼主| ElectronicsX 发表于 2017-3-1 16:06 | 显示全部楼层
没有人碰到过这种情况吗?
cyhuaxiang 发表于 2017-3-1 18:00 | 显示全部楼层
检测高低电平的时间不是得检测边沿吗?
xiaomi999999 发表于 2017-3-1 21:15 | 显示全部楼层
有没有别的中断抢占,中断中用一个引脚输出电平变化,用示波器看看两个信号之间有没有差别
13277120295 发表于 2019-6-13 17:01 | 显示全部楼层
老兄你的这个测电平时间弄出来了吗 ? 我现在急需这个 可以向你请教下吗 我的VX 13277120295
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

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