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);
}
}
|