查看: 3619|回复: 1

EXTI中断,按键一次,进入两次,该如何处理

[复制链接]

3

主题

4

帖子

413

积分

高级工程师

Rank: 3Rank: 3

积分
413
发表于 2022-9-6 13:19:32 | 显示全部楼层 |阅读模式
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 ++;
    }

回复

使用道具 举报

155

主题

847

帖子

4701

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
4701
发表于 2022-9-7 08:29:53 | 显示全部楼层
1、用示波器看按键波形。有没有毛刺。
2、如果有毛刺。自己加滤波,进入中断后,等一个小延时。再判断下io口的电平。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表