本实验使用中断模式,用stm32F103核心板的GPIOC13端一管脚接一个LED,GPIOA0端口一引脚接一个开关。采用中断模式编程,当开关按下时,LED状态改变。
1.在CudeMX设置PA0。
2.生成代码,打开Keil,可以在stm32f1xx_hal_gpio.c中看到中断服务函数
void HAL_GPIO_ EXTI_IRQHandler(uint16_t GPIO_Pin),跟中断回调函数void HAL_GPIO_ EXTI_Callback (uint 16_t GPIO_Pin);中断服务函数就是终止程序运行的函数,回调函数是程序在终止之后希望执行的操作。回调函数在中断服务函数之后。3.在gpio.c中实现中断服务函数里需要运行的代码:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
for(long i = 1;i<72000;i++){}; //消除抖动
if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==1)
{
HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);
}
__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
}
4.观察到LED受按键控制
中断按键控制