GPIO_SetMode(PB, BIT5, GPIO_PMD_INPUT); GPIO_EnableInt(PB, 5, GPIO_INT_RISING); NVIC_EnableIRQ(GPABC_IRQn); /* 将 PE2 配置为输入模式,打开内部上拉,并使能下降沿中断 */ GPIO_SetMode(PE, BIT2, GPIO_PMD_INPUT); GPIO_ENABLE_PULL_UP(PE, BIT2); GPIO_EnableInt(PE, 2, GPIO_INT_FALLING); NVIC_EnableIRQ(GPDEF_IRQn); /* 将 PA2 配置为 EINT0 引脚,并使能下降沿中断 */ SYS->PA_L_MFP = (SYS->PA_L_MFP & ~ SYS_PA_L_MFP_PA2_MFP_Msk) | SYS_PA_L_MFP_PA2_MFP_EINT0; GPIO_SetMode(PA, BIT2, GPIO_PMD_INPUT); GPIO_EnableEINT0(PA, 2, GPIO_INT_FALLING); NVIC_EnableIRQ(EINT0_IRQn); /* 使能消抖功能并选择消抖采样周期。因为PB.5和PE.2以及PA.2都使能了中断,所以最好打开消抖功能 */ GPIO_SET_DEBOUNCE_TIME(GPIO_DBCLKSRC_HCLK, GPIO_DBCLKSEL_1); GPIO_ENABLE_DEBOUNCE(PB, BIT5); GPIO_ENABLE_DEBOUNCE(PE, BIT2); GPIO_ENABLE_DEBOUNCE(PA, BIT2); } void GPABC_IRQHandler(void) { /* 检查是否发生PB.5 中断 */ if (PB->ISRC & BIT5) { PB->ISRC = BIT5;/*清除PB.5中断标志*/ PD0 = PD0 ^ 1; printf("PB.5 INT occurred. \n"); } else { /* 不期望的其它中断 */ PA->ISRC = PA->ISRC; PB->ISRC = PB->ISRC; PC->ISRC = PC->ISRC; printf("Un-expected interrupts. \n"); } } void GPDEF_IRQHandler(void) |