打印

CH2 输入捕获问题

[复制链接]
2274|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
whc820111ylj|  楼主 | 2010-3-1 17:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TI, ic, ST, ni, se
我用TIME2的CH2做输入捕获,数据不对,请大家帮我看一下初始化对不!谢谢!

int main(void)
{
#ifdef DEBUG
  debug();
#endif
  /* System Clocks Configuration */
  RCC_Configuration();
  /* NVIC configuration */
  NVIC_Configuration();
  /* Configure the GPIO ports */
  GPIO_Configuration();

  //TIM2输出初始化
  TIM_TimeBaseInitStruct.TIM_Period = 9999;     //周期0~FFFF
  TIM_TimeBaseInitStruct.TIM_Prescaler = 5;       //时钟分频
  TIM_TimeBaseInitStruct.TIM_ClockDivision = 0;   //时钟分割
  TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//模式
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);//基本初始化

//TIM2通道的捕捉初始化  
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;//通道选择
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling ;//上降沿
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//管脚与寄存器对应关系
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//分频器
  TIM_ICInitStructure.TIM_ICFilter = 0x4;        //滤波设置,经历几个周期跳变认定波形稳定0x0~0xF
  TIM_ICInit(TIM2, &TIM_ICInitStructure);        //初始化
  
  TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);   //选择时钟触发源
  TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);//触发方式
  TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable); //启动定时器的被动触发
  
  TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);        //打开中断
  
  TIM_Cmd(TIM2, ENABLE);                         //启动TIM2
  while(1)
  {}
}



可以进入中断。是不是进入中断就可以读CCR1的数(即:上升沿的时间)?
我读CCR1都是0,但是CCR2有值。

我上面的程序如何算TIME2的时钟,我不会,能说仔细一点,谢谢!我是按本网站程序改的。
沙发
ST_ARM| | 2010-3-1 17:51 | 只看该作者
你是CH2通道,当然是进入中断就可以读CCR2的数了。

使用特权

评论回复
板凳
香水城| | 2010-3-1 17:58 | 只看该作者
用CH2捕获,应该读CCR2才对,为什么要读CCR1?

使用特权

评论回复
地板
sinadz| | 2010-3-1 20:26 | 只看该作者
楼主用的是CH2呀,CH1的值肯定是0呀?

使用特权

评论回复
5
whc820111ylj|  楼主 | 2010-3-2 11:35 | 只看该作者
我是新手,不知道,通过你们的讲解现在明白了,谢谢!

使用特权

评论回复
6
whc820111ylj|  楼主 | 2010-3-2 11:36 | 只看该作者
本帖最后由 whc820111ylj 于 2010-3-2 11:38 编辑

我修改了一下,用TIM2作4路捕获输入。我用同一PWM信号输入到4路上(常态低电平),怎么读CCR1~CCR4的值都不一样啊?搞了好久都不知道什么问题。能帮我看一下吗?程序如下。 输入PWM频度为1K的方波。

int main(void)
{
#ifdef DEBUG
  debug();
#endif

  /* System Clocks Configuration */
  RCC_Configuration();

  /* NVIC configuration */
  NVIC_Configuration();

  /* Configure the GPIO ports */
  GPIO_Configuration();


  //TIM2输出初始化
  TIM_TimeBaseInitStruct.TIM_Period = 9999;     //周期0~FFFF
  TIM_TimeBaseInitStruct.TIM_Prescaler = 5;       //时钟分频
  TIM_TimeBaseInitStruct.TIM_ClockDivision = 0;   //时钟分割
  TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//模式
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);//基本初始化


  
//TIM2通道的捕捉初始化  
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_1 ;//1通道选择
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising ;//上降沿
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//管脚与寄存器对应关系
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;//分频器
  TIM_ICInitStructure.TIM_ICFilter = 0x4;        //滤波设置,经历几个周期跳变认定波形稳定0x0~0xF
  TIM_ICInit(TIM2, &TIM_ICInitStructure);        //初始化
  
  
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2 ;//2通道选择
  TIM_ICInit(TIM2, &TIM_ICInitStructure);        //初始化
  
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_3 ;//3通道选择
  TIM_ICInit(TIM2, &TIM_ICInitStructure);        //初始化
  
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_4 ;//4通道选择
  TIM_ICInit(TIM2, &TIM_ICInitStructure);        //初始化
  
  
  TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);   //选择时钟触发源
  TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);//触发方式
  TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable); //启动定时器的被动触发
  
  TIM_ITConfig(TIM2, TIM_IT_CC1 | TIM_IT_CC2 |TIM_IT_CC3 |TIM_IT_CC4, ENABLE);        //打开中断
  TIM_Cmd(TIM2, ENABLE);                         //启动TIM2

  while(1)
  {}
}

使用特权

评论回复
7
ST_ARM| | 2010-3-2 14:30 | 只看该作者
把下面的去掉试一试
TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);   //选择时钟触发源
TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);//触发方式

使用特权

评论回复
8
whc820111ylj|  楼主 | 2010-3-2 15:37 | 只看该作者
如何发图片啊?

使用特权

评论回复
9
whc820111ylj|  楼主 | 2010-3-2 15:41 | 只看该作者
本帖最后由 whc820111ylj 于 2010-3-2 16:11 编辑

TIMx_SMCR 的TS两位在输入捕捉怎样设。


TS[2:0]:触发选择
这3位选择用于同步计数器的触发输入。
000:内部触发器0(ITR0),TIM1           100:TI1的边沿检测器(TI1F_ED)
001:内部触发器0(ITR1),TIM2           101:滤波后的定时器输入1(TI1FP1)
010:内部触发器0(ITR1),TIM3           110:滤波后的定时器输入2(TI2FP2)
011:内部触发器0(ITR1),TIM4           111:外部触发输入(ETRF)
注:为避免在信号转变时产生错误的边沿检测,必须在未使用这些位( 如
SMS=000)时修改它们。

使用特权

评论回复
10
pkat| | 2010-3-2 21:57 | 只看该作者
先看看哪几路是对的,或者都不对

使用特权

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

本版积分规则

0

主题

10

帖子

1

粉丝