本帖最后由 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¶Ï±ê־λ
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>