stm32的tim中断出不去

2019-10-15 19:51发布

主程序
int main(void)
{
        RCC_Configuration();

        GPIO_Configuration();

  NVIC_Configuration();
       
  /* TIM2 configuration: PWM Input mode ------------------------
     The external signal is connected to TIM2 CH2 pin (PA.01),
     The Rising edge is used as active edge,
     The TIM2 CCR2 is used to compute the frequency value
     The TIM2 CCR1 is used to compute the duty cycle value
  ------------------------------------------------------------ */

  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 = 0x1;  

  TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);  

  TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);  

  TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);  

  TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);  

  TIM_Cmd(TIM2, ENABLE);  

  TIM_ITConfig(TIM2, TIM_IT_CC2 | TIM_IT_CC1, ENABLE);

  while (1)
        {
                 if(FLAGw==1)
                 {

                  LED2(1);
                  Delay(0x0FFFFF);
                  LED2(0);
                  Delay(0x0FFFFF);

                 }
                 else if(FLAGw==2)
                 {
                    LED1(1);
                  Delay(0x0FFFFF);
                  LED1(0);
                  Delay(0x0FFFFF);

                 }

        }
}

中断函数
void TIM2_IRQHandler()
{
    if(TIM_GetITStatus(TIM2,TIM_IT_CC2)== SET)
                {
                         TIM_ClearITPendingBit(TIM2,TIM_IT_CC2);
                        if(FLAGq==0)
                        {
                                IC1Value = TIM_GetCapture2(TIM2);
                                FLAGq = 1;
                        }
                        else if(FLAGq == 1)
                        {
                                IC2Value = TIM_GetCapture2(TIM2);
                                if(IC2Value > IC1Value)
                                {
                                        CapVal = IC2Value - IC1Value;
                                        FLAGq = 0;
                                }               
                                else
                                {
                                        CapVal = ((0xFFFF -IC1Value) + IC2Value);
                                        FLAGq = 0;
                                }                                       
                       
                       
                        if((CapVal>27000)&&(CapVal<33000))
                        {
                                CapVal = 0;
                                FLAGw = 1;
                        }
                        else if((CapVal>64000)&&(CapVal<65000))
                        {
                                CapVal = 0;
                                FLAGw = 2;
                        }
                }
                }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。