EXTI中断,按键一次,进入两次,该如何处理
void MF_EXTI_Line1_Init(void){
FL_GPIO_InitTypeDef GPIO_InitStruct;
FL_EXTI_InitTypeDef EXTI_InitStruct;
// GPIO_COMMON_Type GPIO_Init;
/* PA6 EXTI1_Select2 */
GPIO_InitStruct.pin = FL_GPIO_PIN_6;
GPIO_InitStruct.mode = FL_GPIO_MODE_INPUT;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_ENABLE;
GPIO_InitStruct.remapPin = NULL;
FL_GPIO_Init(GPIOA, &GPIO_InitStruct);
EXTI_InitStruct.input = FL_GPIO_EXTI_INPUT_GROUP2;
EXTI_InitStruct.triggerEdge = FL_GPIO_EXTI_TRIGGER_EDGE_FALLING;
EXTI_InitStruct.filter = FL_ENABLE;
FL_EXTI_Init(FL_GPIO_EXTI_LINE_1, &EXTI_InitStruct);
/*设置中断触发*/
FL_GPIO_SetTriggerEdge(GPIO,FL_GPIO_EXTI_LINE_1,FL_GPIO_EXTI_TRIGGER_EDGE_FALLING);
FL_GPIO_SetExtiLine1(GPIO, FL_GPIO_EXTI_LINE_1_PA6);
}
//中断处理
void GPIO_IRQHandler()
{
if(GPIO->EXTIISR & (0x1 << 1))
{
FL_GPIO_ClearFlag_EXTI(GPIO, FL_GPIO_EXTI_LINE_1);
displayhz16(0,0,test); //
test ++;
}
1、用示波器看按键波形。有没有毛刺。
2、如果有毛刺。自己加滤波,进入中断后,等一个小延时。再判断下io口的电平。
页:
[1]