在STM32cubeMX中
1 在GPIO管脚上选定EXIT功能
2 在GPIO模式中设定触发边沿类型
3 在NVIC中设定NVIC分组及使能EIXT_Line0_interrupt
在MDK中的GPIO.C中编写中断回调函数: HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)(即中断发生后希望做什么事情,判断中断是否发生、发生后清标志已经由HAL_GPIO.C中的HAL_GPIO_EXTI_IRQHandler做过了)。
理解HAL库的的结构:
1中断发生后在stm32f1xx_it.c中进入对应中断向量表的入口函数void EXTI0_IRQHandler(void),该函数调用了HAL_GPIO.C中的HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0),实参就是我们配置的外中断管脚
2在void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)中判断是否中断发生、清理标志,并调用用户需编写的回调函数HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
3注意库函数编写时并不知道我们怎么配置,所以它的回调函数用了“__weak”关键词和#define UNUSED(x) ((void)(x))防止编译器出错和结构清晰的只让用户关注功能回调函数就可以了。
__weak void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(GPIO_Pin);
/* NOTE: This function Should not be modified, when the callback is needed,
the HAL_GPIO_EXTI_Callback could be implemented in the user file
*/
}