xde188 发表于 2014-3-11 11:42:39

STM32f103VE,TIM4输入捕获问题

问题:使用TIM4输入捕获时,配置了输入捕获引脚为PB8,通道为IC3,为什么PB9引脚电平变化时能 进入捕获中断?
代码如下,请问什么地方搞错了。
        
 
int main(void)
{
 
      RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);                                                // 使能TIM模块
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
 
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;        //Pb8
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
       
        //TIM通道的捕捉初始化   
        TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;//通道选择 
        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 = 0x0;        //滤波设置,经历几个周期跳变认定波形稳定0x0~0xF 
        TIM_ICInit(TIM4, &TIM_ICInitStructure);        //初始化
       
        TIM_Cmd(TIM4, ENABLE);                         //启动TIM4
        TIM_ITConfig(TIM4, TIM_IT_CC3, ENABLE);        //打开中断       
 
        NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure); 
 
 
       while (1)
        {
       
 
        }
}
 
 
//TIM4捕获中断服务函数
void TIM4_IRQHandler( void )
{
 
   if(TIM_GetITStatus(TIM4, TIM_IT_CC3) == SET)
   {               
 
        TIM_ClearITPendingBit(TIM4, TIM_IT_CC3);
          if(CaptureNumber == 0)
          {
            //Get the Input Capture value
            IC4ReadValue1 = TIM_GetCapture3(TIM4);
            CaptureNumber = 1;
          }
          else if(CaptureNumber == 1)
          {
            //Get the Input Capture value 
            IC4ReadValue2 = TIM_GetCapture3(TIM4); 
            
            //Capture computation
            if (IC4ReadValue2 > IC4ReadValue1)
            {
              Capture = (IC4ReadValue2 - IC4ReadValue1); 
            }
            else
            {
              Capture = ((0xFFFF - IC4ReadValue1) + IC4ReadValue2); 
            }
            //Frequency computation 
            TIM4Freq = (uint32_t) SystemCoreClock / Capture;
            CaptureNumber = 0;
          }
  }

fengye5340 发表于 2014-3-11 14:23:36

RE:STM32f103VE,TIM4输入捕获问题

PB8 PB9属于IC3 /IC4,它们是一组的,你在配置定时器的捕获时,需要配置触发源,设置从定时器。另外,看一下你的引脚线接错了吗?

xde188 发表于 2014-3-11 16:25:09

回复:STM32f103VE,TIM4输入捕获问题

引脚我已经查过了,没有接错。同样的方法配置TIM3,CH3 CH4就没有这个问题,不解? 

xde188 发表于 2014-3-13 14:15:18

回复:STM32f103VE,TIM4输入捕获问题

回复第 3 楼 于2014-03-11 16:25:09发表:
引脚我已经查过了,没有接错。同样的方法配置TIM3,CH3 CH4就没有这个问题,不解? 
我用普通输入捕获功能。

 

果果子 发表于 2014-11-26 12:09:24

请问楼主,你的这个问题解决了吗?我也出现了此问题。

jinniuxing 发表于 2020-11-3 10:56:34

谢谢分享!
页: [1]
查看完整版本: STM32f103VE,TIM4输入捕获问题