一知半解学CubeMX——GPIO:外部(按键)中断

一知半解学习环境:
    1、CubeMX 4.23.0
    2、uVision 5.14.2
    3、MCU 启明 STM32F407 开发板(高配版) V3.1

一知半解学习目标:
    1、掌握CubeMX下RCC以及SYS的相关配置;
    2、掌握CubeMX下外部中断(EXIT)的配置;
    3、实现开发板按键输入对LED的控制;

一知半解实现过程:
    1、配置系统调试接口及时基时钟源;
一知半解学CubeMX——GPIO:外部(按键)中断
    2、配置外部高速时钟源(HSE);
一知半解学CubeMX——GPIO:外部(按键)中断
    3、根据原理图LED管脚配置相应GPIO引脚并修改宏定义名称;
一知半解学CubeMX——GPIO:外部(按键)中断
一知半解学CubeMX——GPIO:外部(按键)中断

配置LED输出引脚为输出模式并修改用户标签名
一知半解学CubeMX——GPIO:外部(按键)中断

    4、根据原理图按键引脚配置相应外部中断;
五向按键原理图
一知半解学CubeMX——GPIO:外部(按键)中断
一知半解学CubeMX——GPIO:外部(按键)中断

配置按键引脚为外部输入中断,并修改用户标签名
一知半解学CubeMX——GPIO:外部(按键)中断
    5、配置时钟树,主频168M;
一知半解学CubeMX——GPIO:外部(按键)中断
    6、配置工程涉及GPIO引脚参数;
三个LED引脚配置
一知半解学CubeMX——GPIO:外部(按键)中断
四个按键(外部输入中断)配置如下
一知半解学CubeMX——GPIO:外部(按键)中断
    7、使能外部输入中断;
一知半解学CubeMX——GPIO:外部(按键)中断
    8、生成工程并修改程序;

首先,main.c页面不需要做任何改动;
其次,只需要在生成的gpio.c页面最下添加外部中断回调函数即可;

/* USER CODE BEGIN 2 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
    
    if(GPIO_Pin == KEY0_Pin){/* KEY0 */
        
        /* 翻转LED0 */
        HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
    }
    if(GPIO_Pin == KEY1_Pin){/* KEY1 */
        
        /* 翻转LED1 */
        HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);
    }
    if(GPIO_Pin == KEY2_Pin){/* KEY2 */
        
        /* 翻转LED2 */
        HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);
    }
    if(GPIO_Pin == KEY3_Pin){/* KEY3 */
        
        /* 熄灭所有指示灯 */
        HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_SET);
        HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET);
        HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET);
    }    
}
/* USER CODE END 2 */

一知半解套路回顾:
    1、掌握CubeMX配置的常规套路,如SYS、RCC以及时钟树的配置等;
    2、掌握外部中断(EXIT)的配置方法(引脚配置+使能中断)
    3、牢记外部中断回调函数的使用;