GPIO Interrupt
GPIO Interrupt示例实现了GPIO的中断输入功能。GPIO配置为中断输入时,可以配置为上升/下降沿触发、高/低电平触发。
GPIO Interrupt示例的源代码和工程文件位于SDK_Folder\projects\peripheral\gpio\gpio_interrupt,其中工程文件在文件夹Keil_5下。
代码理解
示例工程流程图如图 11所示:
- 配置GPIO模块中断输入。
gpio_init_t gpio_config = GPIO_DEFAULT_CONFIG; gpio_config.mode = GPIO_MODE_IT_FALLING; gpio_config.pin = GPIO_KEY0 | GPIO_KEY1; gpio_config.pull = GPIO_PULLUP; hal_gpio_init(GPIO_KEY_PORT, &gpio_config); /* Enable interrupt */ hal_nvic_clear_pending_irq(GPIO_GET_IRQNUM(GPIO_KEY_PORT)); hal_nvic_enable_irq(GPIO_GET_IRQNUM(GPIO_KEY_PORT));GPIO配置参数细节请参考GPIO Input & Output,其中mode选择GPIO_MODE_IT_FALLING,pin选择GPIO_KEY0、GPIO_KEY1即GPIO_PIN_12、GPIO_PIN_13。
- 调用hal_nvic_clear_pending_irq()和hal_nvic_enable_irq()清除并使能中断。代码如下所示:
hal_nvic_clear_pending_irq(GPIO_GET_IRQNUM(GPIO_KEY_PORT)); hal_nvic_enable_irq(GPIO_GET_IRQNUM(GPIO_KEY_PORT)); - 中断状态通过回调函数hal_gpio_exti_callback()返回,用户在此函数内可自定义操作。
测试验证
- 用GProgrammer下载gpio_interrupt.bin至开发板。
- 将开发板串口连接至PC端,打开并配置GRUart。
- 在GRUart的Receive Data窗口中将会显示GPIO的中断输入结果。