关于定时器的输入捕获,TIM1的一通道进行捕获,TIM4的一通道输出PWM波

2019-07-21 00:20发布

这样配置为什么进不了中断呢?PWM输出正常,求解救啊,纠结好几天了。
void TIM_Configuration(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseInitStruct;
    TIM_ICInitTypeDef  TIM_ICInitStruct;
    
    TIM_TimeBaseInitStruct.TIM_ClockDivision=0;
    TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseInitStruct.TIM_Period=65535;
    TIM_TimeBaseInitStruct.TIM_Prescaler=8400-1;
    TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
    TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);
    
    TIM_ICInitStruct.TIM_Channel=TIM_Channel_1;
    TIM_ICInitStruct.TIM_ICFilter=0;
    TIM_ICInitStruct.TIM_ICPolarity=TIM_ICPolarity_Rising;
    TIM_ICInitStruct.TIM_ICPrescaler=0;
    TIM_ICInitStruct.TIM_ICSelection=TIM_ICSelection_DirectTI;
    TIM_ICInit(TIM1,&TIM_ICInitStruct);
    
    TIM_ClearFlag(TIM1,TIM_IT_CC1);
    TIM_ITConfig(TIM1,TIM_IT_CC1,ENABLE);
    TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
    TIM_PWMIConfig(TIM1,&TIM_ICInitStruct);
    TIM_SelectInputTrigger(TIM1, TIM_TS_TI1FP1);
    TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Reset);
    TIM_SelectMasterSlaveMode(TIM1,TIM_MasterSlaveMode_Enable);
    TIM_Cmd(TIM1,ENABLE);   
}
中断函数
void TIM1_IRQn(void)
{   

TIM_ICInitTypeDef  TIM_ICInitStructure;
   GPIO_SetBits(GPIOA,GPIO_Pin_5);
  if(TIM_GetITStatus(TIM1, TIM_IT_CC1) == SET)
  {
      
     TIM_ClearITPendingBit(TIM1,TIM_IT_CC1);
     if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)==SET)//当前为上升沿 改下次触发为下降沿
     {
        TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
        TIM_ICInit(TIM1, &TIM_ICInitStructure);
        TIM1CH1_U_CAPTURE_VAL= TIM1->CCR1;
     }  
     else
     {
        TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
        TIM_ICInit(TIM1, &TIM_ICInitStructure);
        TIM1CH1_D_CAPTURE_VAL= TIM1->CCR1;
     }         
    if(TIM1CH1_D_CAPTURE_VAL>TIM1CH1_U_CAPTURE_VAL)
    {
        TIM1CH1_CAPTURE_VAL=TIM1CH1_D_CAPTURE_VAL-TIM1CH1_U_CAPTURE_VAL;
    }
    else
    {
        TIM1CH1_CAPTURE_VAL=0XFFFF-TIM1CH1_U_CAPTURE_VAL+TIM1CH1_D_CAPTURE_VAL;
    }
   }
 }


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
张晓斌
1楼-- · 2019-07-21 19:34
回复【5楼】lycreturn:
---------------------------------
我真的找不到这个函数在哪被调用了!完全没理由啊,我这是第一次用这个函数,它怎么就会被重定义了呢!
lycreturn
2楼-- · 2019-07-21 22:00
回复【8楼】张晓斌:
---------------------------------
全局搜索一下TIM1_CC_IRQHandler
张晓斌
3楼-- · 2019-07-22 03:40
搜索了,我把所有的关于它的定义都注释了,还是不行啊!
张晓斌
4楼-- · 2019-07-22 04:10
 精彩回答 2  元偷偷看……
lycreturn
5楼-- · 2019-07-22 05:19
 精彩回答 2  元偷偷看……
张晓斌
6楼-- · 2019-07-22 06:16
回复【12楼】lycreturn:
---------------------------------
嗯,F1的弄好了,F4的没弄出来,用的ST官方的NucloF411的板子,我如果开TIM3用于捕获,TIM4用于输出PWM波,就不工作,PWM无法输出,如果换成是TIM1捕获,PWM就能输出了,不知道为啥。

一周热门 更多>