首先贴出工程点此下载工程我用的外部中断引脚是PA9,LED引脚是PC13,芯片是stm32c8t6。
工程配置
我这里直接上图得了首先是一些系统设置
然后配置引脚
最后生成代码,我就不说了,注意不要有中文字符做文件夹就行。
处理代码了
如果配置没有问题,可以找到中断函数
可以看到
voidEXTI9_5_IRQHandler(void){/*USERCODEBEGINEXTI9_5_IRQn0*//*USERCODEENDEXTI9_5_IRQn0*/HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);/*USERCODEBEGINEXTI9_5_IRQn1*//*USERCODEENDEXTI9_5_IRQn1*/}
进入HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);
voidHAL_GPIO_EXTI_IRQHandler(uint16_tGPIO_Pin){/*EXTIlineinterruptdetected*/if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin)!=0x00u){__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);HAL_GPIO_EXTI_Callback(GPIO_Pin);}}
那么问题就简单了,我们只需要把中断的任务放在回调函数HAL_GPIO_EXTI_Callback(GPIO_Pin);里就够了,在下面实际上可以看到定义了一个弱函数回调函数,这表明如果我们需要回调函数就得重新定义这个函数。我是这么写的
voidHAL_GPIO_EXTI_Callback(uint16_tGPIO_Pin){if(GPIO_Pin==GPIO_PIN_9){HAL_Delay(5);if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_9)==GPIO_PIN_RESET){HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);}}}
注意中间有一个消抖操作,按键一定要消抖!!!
即每进入一次回调函数(即中断),LED灯的状态就会翻转。OK了,大功告成。