定时器输入捕获,检测不到电平捕获

2019-07-20 01:10发布

本帖最后由 zhangyuju 于 2019-6-19 21:15 编辑

请问一下各位大神,我使用F405VGt6 PB15管脚编写输入捕获实验,发现一直进入TIM8_BRK_TIM12_IRQHandler中断,但就是检测不到电平触发void TIM12_CH2_Cap_Init(FunctionalState new_state, u16 arr,u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;
        TIM_ICInitTypeDef  TIM12_ICInitStructure;
        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM12,ENABLE);          //TIM12ê±Öóê1Äü   
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);         //ê1ÄüPORTBê±Öó        
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //GPIOB15
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//¸′óÃ1|Äü
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;        //Ëù¶è100MHz
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //íÆíì¸′óÃêä3ö
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //éÏà-
        GPIO_Init(GPIOB,&GPIO_InitStructure); //3õê¼»ˉPB15
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_TIM12); //PB15¸′óÃ붨ê±Æ÷15
         
        TIM_TimeBaseStructure.TIM_Prescaler=psc;  //¶¨ê±Æ÷·ÖÆμ
        TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //ÏòéϼÆêyÄ£ê½
        TIM_TimeBaseStructure.TIM_Period=arr;   //×Ô¶ˉÖØ×°ÔØÖμ
        TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;         
        TIM_TimeBaseInit(TIM12,&TIM_TimeBaseStructure);
        

        //3õê¼»ˉTIM12êäèë2¶»ñ2Îêy
        TIM12_ICInitStructure.TIM_Channel = TIM_Channel_2; //CC1S=01         Ñ¡Ôñêäèë¶Ë IC2ó3éäμ½TI1éÏ
        TIM12_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;        //éÏéyÑØ2¶»ñ
        TIM12_ICInitStructure.TIM_ICSelection = TIM_ICSelection_IndirectTI; //ó3éäμ½TI1éÏ
        TIM12_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;         //ÅäÖÃêäèë·ÖÆμ,2»·ÖÆμ
        TIM12_ICInitStructure.TIM_ICFilter = 0x00;//IC1F=0000 ÅäÖÃêäèëÂË2¨Æ÷ 2»ÂË2¨
        TIM_ICInit(TIM12, &TIM12_ICInitStructure);

//        TIM_ClearITPendingBit(TIM12, TIM_IT_CC2|TIM_IT_Update); //Çå3yÖD¶Ï±ê־λ
        TIM_ITConfig(TIM12,TIM_IT_Update|TIM_IT_CC2,ENABLE);//ÔêDí¸üDÂÖD¶Ï ,ÔêDíCC2IE2¶»ñÖD¶Ï        
        

//          TIM_Cmd(TIM12,new_state);         //1رն¨ê±Æ÷12
        TIM_Cmd(TIM12,ENABLE);         //1رն¨ê±Æ÷12
        
        NVIC_InitStructure.NVIC_IRQChannel = TIM8_BRK_TIM12_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//ÇàÕ¼óÅÏ輶3
        NVIC_InitStructure.NVIC_IRQChannelSubPriority =10;                //×óóÅÏ輶10
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                        //IRQí¨μàê1Äü
        NVIC_Init(&NVIC_InitStructure);        //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉVIC¼Ä′æÆ÷¡¢        
        
//        TIM_ClearITPendingBit(TIM12, TIM_IT_CC2|TIM_IT_Update); //Çå3yÖD¶Ï±ê־λ

}


void TIM8_BRK_TIM12_IRQHandler(void)
{                     
         if((TIM12CH2_CAPTURE_STA&0X80)==0) //»1Î′3é1|2¶»ñ        
        {
                if(TIM_GetITStatus(TIM12, TIM_IT_Update) != RESET)//ÅD¶ÏêÇ·ñÎa¸üDÂÖD¶Ï
                {            
                        if(TIM12CH2_CAPTURE_STA&0X40)//òѾ-2¶»ñμ½¸ßμçƽáË
                        {
                                if((TIM12CH2_CAPTURE_STA&0X3F)==0X3F)//¸ßμçƽì«3¤áË
                                {
                                        TIM12CH2_CAPTURE_STA|=0X80;                //±ê¼Ç3é1|2¶»ñáËò»′Î
                                        TIM12CH2_CAPTURE_VAL=0XFFFF;
                                }else TIM12CH2_CAPTURE_STA++;
                        }                                       
//                        TIM12CH2_CAPTURE_STA=0;                        //Çå¿Õ
//                        TIM12CH2_CAPTURE_VAL=0;
//                        TIM_OC2PolarityConfig(TIM12,TIM_ICPolarity_Rising); //CC2P=0 éèÖÃÎaéÏéyÑØ2¶»ñ  òç3ö 3¬1y65ms ÖØDÂéèÖÃéÏéyÑØ2¶»ñ
                }
               
                if(TIM_GetITStatus(TIM12, TIM_IT_CC2) != RESET)//2¶»ñ2·¢éú2¶»ñê¼t
                {                        
                        if (TIM12CH2_CAPTURE_STA&0X40) {                //2¶»ñμ½ò»¸öϽμÑØ                                                                           
                                TIM12CH2_CAPTURE_STA|=0X80;                //±ê¼Ç3é1|2¶»ñμ½ò»′θßμçƽÂö¿í
                                TIM12CH2_CAPTURE_VAL=TIM_GetCapture1(TIM12);//»ñè¡μ±Ç°μÄ2¶»ñÖμ.
                                fall_capture_val=TIM_GetCapture1(TIM12);//»ñè¡μ±Ç°μÄ2¶»ñÖμ.        
                                TIM_OC2PolarityConfig(TIM12,TIM_ICPolarity_Rising); //CC1P=0 éèÖÃÎaéÏéyÑØ2¶»ñ                                                        
                        } else {//2¶»ñéÏéyÑØ                                
                                rise_capture_val=TIM_GetCapture1(TIM12);//»ñè¡μ±Ç°μÄ2¶»ñÖμ.
                                TIM12CH2_CAPTURE_STA=0;                        //Çå¿Õ
                                TIM12CH2_CAPTURE_VAL=0;
                                TIM_SetCounter(TIM12,0);
                                TIM12CH2_CAPTURE_STA|=0X40;                //±ê¼Ç2¶»ñμ½áËéÏéyÑØ
                                TIM_OC2PolarityConfig(TIM12,TIM_ICPolarity_Falling);                //CC1P=1 éèÖÃÎaϽμÑØ2¶»ñ
                        }                        
                }                                

        }
        TIM_ClearITPendingBit(TIM12, TIM_IT_CC2|TIM_IT_Update); //Çå3yÖD¶Ï±ê־λ
}
        


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