STM32F103 外部中斷設置為下降沿觸發并在中斷函數內檢測用端口電壓有時為高電平,請問是由于誤觸發導致的嗎,還是配置有問題,輸入信號是按鍵給的。
初始化程序
void exti0_init(void(*f)(uint8_t,uint8_t),uint8_t item){
exti_flag = -1;
exti_cp = f;
exit_item = item;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO,ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource3);
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line3;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn ;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
NVIC_Init(&NVIC_InitStructure);
}
void EXTI3_IRQHandler(void){
if(EXTI_GetITStatus(EXTI_Line3) != RESET){
#ifdef DEBUG_ENABLE
printf("EXIT3 trigger:%d\n",GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_3));
#endif
EXTI_ClearITPendingBit(EXTI_Line3);
while(EXTI_GetITStatus(EXTI_Line3) != RESET);
}
}
|