文章目录
- GD - EmbeddedBuilder - 在EXTI中断回调中,可以知道中断触发类型
- 概述
- 笔记
- END
GD - EmbeddedBuilder - 在EXTI中断回调中,可以知道中断触发类型
概述
看了EmbeddedBuilder_v1.4.1.23782自带的官方demo工程,里面关于外中断的demo工程很简单。
进了外中断回调就干活。
但是这个中断触发类型(上升沿,下降沿)不清楚。
在做实验时发现,从回调单步出去,就能看到中断触发类型。
触发类型就2种(上升沿,下降沿),如果用图形化回调设置的外中断为上升沿 + 下降沿,那么中断就会进来2次,一次是上升沿的外中断,一次是下降沿的外中断。
笔记
初始化部分,EmbeddedBuilder已经生成好了。
看了一下,几乎每个pin都可以服用为外中断,挺灵活的。
void EXTI0_1_IRQHandler(void)
{/* user code [EXTI0_1_IRQn local 0] begin *//* user code [EXTI0_1_IRQn local 0] end */hal_exti_gpio_irq(EXTI_0_1_IRQHandler_USED); // 向导生成的,这个中断请求是一个范围值的枚举类型/* user code [EXTI0_1_IRQn local 1] begin *//* user code [EXTI0_1_IRQn local 1] end */
}
void s_gpio_irq_handle(uint32_t id, uint32_t event)
{// PB1 exti_1// #define KEY_PIN_IN_PIN GPIO_PIN_1if(EXTI_PIN_1 == id){ // 可以知道是外中断几// gd_eval_led_toggle(LED2);// 根据event,可以知道外中断触发类型if (EXTI_IRQ_EVENT_RISING == event){hal_gpio_bit_reset(LED_PIN_GPIO_PORT, LED_PIN_PIN);} else if (EXTI_IRQ_EVENT_FALLING == event) {hal_gpio_bit_reset(LED_PIN_GPIO_PORT, LED_PIN_PIN);}}
}
/* user code [global 0] end *//*!\brief main function\param[in] none\param[out] none\retval none
*/
int main(void)
{/* user code [local 0] begin *//* user code [local 0] end */msd_system_init();msd_clock_init();/* user code [local 1] begin *//* user code [local 1] end */msd_gpio_init();/* user code [local 2] begin */hal_exti_gpio_irq_handle_set(s_gpio_irq_handle); // 外中断注册回调/* user code [local 2] end */while(1){/* user code [local 3] begin */// 轮询处理/* user code [local 3] end */}
}