STM32F103RC怎么样同时捕获16路脉冲输入?

[复制链接]
11428|32
香水城 发表于 2009-7-22 14:11 | 显示全部楼层

测量的脉冲长度跨度太大,可以有2个解决办法

1)降低分辩率,即把定时器的预分频系数加大。

2)使用溢出中断,记录溢出次数,然后在捕获中断时,把溢出的次数与读出的捕获数值一并计算。
 楼主| kingpower2018 发表于 2009-7-22 14:48 | 显示全部楼层

使用溢出中断(不能计16路)?

溢出中断只是对TIMx定时器操作,而不是对通道的操作,只能知道是某个定时器溢出中断,而不能知道是某个通道(路)溢出中断?这样就不能同时捕获16路脉冲输入呀
 楼主| kingpower2018 发表于 2009-7-22 14:56 | 显示全部楼层

找到了某个通道(路)溢出中断

我已经 找到了某个通道(路)溢出中断.谢了
 楼主| kingpower2018 发表于 2009-7-22 14:57 | 显示全部楼层

如下

/*******************************************************************************
* Function Name  : TIM_GetFlagStatus
* Description    : Checks whether the specified TIM flag is set or not.
* Input          : - TIMx: where x can be 1 to 8 to select the TIM peripheral.
*                  - TIM_FLAG: specifies the flag to check.
*                    This parameter can be one of the following values:
*                       - TIM_FLAG_Update: TIM update Flag
*                       - TIM_FLAG_CC1: TIM Capture Compare 1 Flag
*                       - TIM_FLAG_CC2: TIM Capture Compare 2 Flag
*                       - TIM_FLAG_CC3: TIM Capture Compare 3 Flag
*                       - TIM_FLAG_CC4: TIM Capture Compare 4 Flag
*                       - TIM_FLAG_COM: TIM Commutation Flag
*                       - TIM_FLAG_Trigger: TIM Trigger Flag
*                       - TIM_FLAG_Break: TIM Break Flag
*                       - TIM_FLAG_CC1OF: TIM Capture Compare 1 overcapture Flag
*                       - TIM_FLAG_CC2OF: TIM Capture Compare 2 overcapture Flag
*                       - TIM_FLAG_CC3OF: TIM Capture Compare 3 overcapture Flag
*                       - TIM_FLAG_CC4OF: TIM Capture Compare 4 overcapture Flag
* Output         : None
* Return         : The new state of TIM_FLAG (SET or RESET).
*******************************************************************************/
FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, u16 TIM_FLAG)

  ITStatus bitstatus = RESET;  

  /* Check the parameters */
  assert_param(IS_TIM_ALL_PERIPH(TIMx));
  assert_param(IS_TIM_GET_FLAG(TIM_FLAG));
  assert_param(IS_TIM_PERIPH_FLAG(TIMx, TIM_FLAG));
  
  if ((TIMx->SR & TIM_FLAG) != (u16)RESET)
  {
    bitstatus = SET;
  }
  else
  {
    bitstatus = RESET;
  }
  return bitstatus;
}
香水城 发表于 2009-7-22 15:24 | 显示全部楼层

看样子你还没有搞明白输入捕获的原理

简单地说,计数器在不停地计数,当发生输入捕获指定的事件时,如一个上升沿,当前计数器的数值会被拷贝到这个事件对应通道的输入捕获寄存器中。

比如,计数器按照输入时钟72MHz计数,如果上升沿时捕获到1234(IC0),而再次捕获到下降沿是54321(IC1),则这个信号的宽度是(IC1 - IC0)/72MHz = 737.32us。

如果再次捕获到下降沿时仍然是54321(IC1),但在捕获到上升沿与捕获到下降沿之间发生过一次溢出中断,则信号的宽度应为(IC1 - IC0 + 65536)/72MHz = 1647.54us,因为计数器是16位的,所以溢出一次要增加65536。


一个计数器可以对应定时器的所有4个通道,所以只有计数器的溢出中断,根本不可能有某个通道的溢出中断。
 楼主| kingpower2018 发表于 2009-7-23 11:47 | 显示全部楼层

谢了

我已经搞懂了,是一个计数器的溢出中断,但是我用了4个自已设定的记溢出标志来区分4个通道的,已经ok
hjiongh 发表于 2009-7-24 18:14 | 显示全部楼层

香主,16楼的Doxygen chm文件能给个下载链接吗

我没装Doxygen,你既然有编译好的chm格式,能共享一下吗?

谢谢
香水城 发表于 2009-7-24 18:20 | 显示全部楼层

这个文件在STM32固件库v3.1中

请在ST网站下载。
shichao198901 发表于 2013-5-2 15:15 | 显示全部楼层
捕获一路不是需要两个通道相互配合吗?一个定时器不是只能捕获一路吗?
cjhk 发表于 2013-5-2 18:54 | 显示全部楼层
香主  强大   不错   帖子很给力   精品
yygkqzh 发表于 2013-12-13 23:54 | 显示全部楼层
大哥,您好。您的这个16路脉冲计数器做成功了吗?能不能把代码给我发一下,小弟在此先行谢过了。

我的邮箱是825979838@qq.com

再次谢过了!!!
cld9999 发表于 2014-7-28 22:03 | 显示全部楼层
kingpower2018 发表于 2009-7-21 15:52
用TIM1,TIM2,TIM3,TIM4 的TIM_Channel_1、TIM_Channel_2 共8路我会,但TIM_Channel_3、TIM_Chann ...

大神    8路怎么做的啊
我爱你的吻123 发表于 2015-11-4 13:22 | 显示全部楼层
看过帖子,非常强大。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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