关于CH582F的GPIO中断有一些疑问
__INTERRUPT
__HIGH_CODE
void GPIOB_IRQHandler( void )
{
    if(GPIOB_ReadITFlagBit(GPIO_Pin_4))
    {
        temp = R16_PB_INT_IF;
        PRINT("GPIO41 %d\r\n", temp);
        GPIOB_ClearITFlagBit(GPIO_Pin_4);
        temp = R16_PB_INT_IF;
        PRINT("GPIO42 %d\r\n", temp);
    }
    if(GPIOB_ReadITFlagBit(GPIO_Pin_10))
    {
        temp = R16_PB_INT_IF;
        PRINT("GPIO101 %d\r\n", temp);
        GPIOB_ClearITFlagBit(GPIO_Pin_10);
        temp = R16_PB_INT_IF;
        PRINT("GPIO102 %d\r\n", temp);
    }
}

现在发现一个问题,明明只写了GPIOB4触发中断,可GPIOB10也能进去。随后我在while里循环打印R16_PB_INT_IF,发现它初始值就是已经是0XFFFF,为什么要这样子处理?不应该是复位值0吗?

在中断服务函数中,判断开启中断的GPIO即可。对于没有启用中断的IO,R16_Px_INT_IF中的位变化也无需关心。

无论有没有配置GPIO中断使能,R16_Px_INT_IF中的各位中断标志,会自动判断是否已产生中断信号并置位,但只有指定的GPIO使能了中断,才会触发中断。

对于没有使能的IO,您可以尝试在主循环中不断查询中断标志并清零,再按当前的中断条件变化一下电平,中断标志还是会置位的,但不会进中断。


只有登录才能回复,可以选择微信账号登录