一知半解学习环境:
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、配置系统调试接口及时基时钟源;

2、配置外部高速时钟源(HSE);

3、根据原理图LED管脚配置相应GPIO引脚并修改宏定义名称;


配置LED输出引脚为输出模式并修改用户标签名

4、根据原理图按键引脚配置相应外部中断;
五向按键原理图


配置按键引脚为外部输入中断,并修改用户标签名

5、配置时钟树,主频168M;

6、配置工程涉及GPIO引脚参数;
三个LED引脚配置

四个按键(外部输入中断)配置如下

7、使能外部输入中断;

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、牢记外部中断回调函数的使用;