实验现象:使用按键(KEY_2)来产生中断,中断程序是LED灯翻转
在我看来,外设中断就是芯片与人们对其进行操作和控制的一种交互方式。芯片内的程序是循环执行下去的,我们通过一些操作,比如键盘按键,鼠标等让CPU意识到有指令进来,放下手头的工作来响应我们。
1、ioc设置
(1)在GPIO mode 中选择 “下降沿触发中断模式”,选择接“上拉电阻” 。
(2) 在NVIC中点击Enable,使能中断。
2、程序
中断的过程可以简单地理解为: 外设中断触发——中断处理函数——中断操作
中断处理函数,分为优先级选择——>中断源选择——>回调函数。这里为什么要打箭头呢?
优先级选择:EXTI15_10_IRQHandler() 位于 “stm32f1xx_it.c”
中断源选择: HAL_GPIO_EXTI_IRQHandler(KEY_2_Pin) 位于“stm32f1xx_hal_gpio.c”。
弱回调函数:__weak void HAL_GPIO_EXTI_Callback() 位于“stm32f1xx_hal_gpio.c”。
可以看到这三个函数是依次包含。回调函数一般是我们来写,这里的弱回调是为了在没有回调函数时让程序正常执行。
我们写的回调函数:
这里的 HAL_NVIC_DisableIRQ(KEY_2_EXTI_IRQn); 是在按键处理期间禁止再次触发KEY2键的外部中断。HAL_NVIC_EnableIRQ(KEY_2_EXTI_IRQn); 结束后开启中断允许。
以上是笔者的理解,理解有误不要细究。