
平台keil V5.31小华芯片风格还是比较特别的。主函数int32_t main(void) { /* Register write enable for some required peripherals. */ LL_PERIPH_WE(LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_GPIO | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM); /* BSP Clock initialize */ BSP_CLK_Init(); /* BSP LED initialize */ BSP_LED_Init(); /* KEY10 initialize */ KEY10_Global_Init(); KEY10_Group_Init(); KEY10_Share_Init(); /* Register write protected for some required peripherals. */ LL_PERIPH_WP(LL_PERIPH_EFM | LL_PERIPH_FCG | LL_PERIPH_GPIO | LL_PERIPH_PWC_CLK_RMU | LL_PERIPH_SRAM); /* wait KEY10 pressed */ for (;;) { ; } }配置#define KEY10_PORT (GPIO_PORT_B) #define KEY10_PIN (GPIO_PIN_01) #define KEY10_EXTINT_CH (EXTINT_CH01) #define KEY10_INT_SRC (INT_SRC_PORT_EIRQ1) #define KEY10_GLB_INT_IRQn (INT001_IRQn) #define KEY10_GRP_INT_IRQn (INT033_IRQn) #define KEY10_SHARE_INT_IRQn (INT128_IRQn) #define KEY10_INT_PRIO (DDL_IRQ_PRIO_DEFAULT)初始化static void KEY10_Global_Init(void) { stc_extint_init_t stcExtIntInit; stc_irq_signin_config_t stcIrqSignConfig; stc_gpio_init_t stcGpioInit; /* GPIO config */ (void)GPIO_StructInit(stcGpioInit); stcGpioInit.u16ExtInt PIN_EXTINT_ON; stcGpioInit.u16PullUp PIN_PU_ON; (void)GPIO_Init(KEY10_PORT, KEY10_PIN, stcGpioInit); /* ExtInt config */ (void)EXTINT_StructInit(stcExtIntInit); stcExtIntInit.u32Filter EXTINT_FILTER_ON; stcExtIntInit.u32FilterClock EXTINT_FCLK_DIV8; stcExtIntInit.u32Edge EXTINT_TRIG_FALLING; (void)EXTINT_Init(KEY10_EXTINT_CH, stcExtIntInit); /* IRQ sign-in */ stcIrqSignConfig.enIntSrc KEY10_INT_SRC; stcIrqSignConfig.enIRQn KEY10_GLB_INT_IRQn; stcIrqSignConfig.pfnCallback EXTINT_KEY10_Global_IrqCallback; (void)INTC_IrqSignIn(stcIrqSignConfig); /* NVIC config */ NVIC_ClearPendingIRQ(stcIrqSignConfig.enIRQn); NVIC_SetPriority(stcIrqSignConfig.enIRQn, KEY10_INT_PRIO); NVIC_EnableIRQ(stcIrqSignConfig.enIRQn); }回调函数static void EXTINT_KEY10_Global_IrqCallback(void) { if (SET EXTINT_GetExtIntStatus(KEY10_EXTINT_CH)) { BSP_LED_Toggle(LED_BLUE); while (PIN_RESET GPIO_ReadInputPins(KEY10_PORT, KEY10_PIN)) { ; } EXTINT_ClearExtIntStatus(KEY10_EXTINT_CH); NVIC_DisableIRQ(KEY10_GLB_INT_IRQn); NVIC_EnableIRQ(KEY10_GRP_INT_IRQn); } }测试结果只响应一次因为响应一次后关闭了。如果是PC6则配置如下#define KEY10_PORT (GPIO_PORT_C) #define KEY10_PIN (GPIO_PIN_06) #define KEY10_EXTINT_CH (EXTINT_CH06) #define KEY10_INT_SRC (INT_SRC_PORT_EIRQ6) #define KEY10_GLB_INT_IRQn (INT006_IRQn) #define KEY10_GRP_INT_IRQn (INT033_IRQn) #define KEY10_SHARE_INT_IRQn (INT128_IRQn) #define KEY10_INT_PRIO (DDL_IRQ_PRIO_DEFAULT)