STM32F407霸天虎HAL库学习笔记-按键检测
- 一、软件准备
- 二、硬件准备
- 三、CubeMX配置
- 四、keil编程
-
- main函数
- 五、实验效果
一、软件准备
可以看上一篇的软件准备
二、硬件准备
STM32F407霸天虎
DAP下载器
三、CubeMX配置
野火霸天虎使用的主控芯片是STM32F407ZGT6 RCC选择外部高速时钟 Debug要选择Serial Wire,否则只能烧录一次
根据原理图,按钮1在,按键2在,当这些按钮没有按下时,GPIO 引脚的输入状态为低电平 (按键所在的电路不通,引脚接地),按键时,GPIO 引脚的输入状态为高电平 (按钮所在的电路导通,引脚接通电源)。只要检测引脚的输入电平,就可以判断按钮是否按下。 配置Key1,Key2的GPIO该模式为输入模式(浮空输入)
从原理图可以看出,开发板LED引脚在PF除此之外,还有一个6、7、8上PC3的蓝色LED灯,都为 这个实验只用红灯,只需要配置PF6就可以了
转向时钟树配置,STM32F407ZGT最大时钟频率为168MHz,开发板外部晶振为 25MHz,我们填入 25;通道选择 LSE;PLLM 选为/25;倍频系数; N 选择为 x336;系统时钟选择 PLLCLK;设置为系统时钟 168Mz;APB1 分频系数为/4 即 PCLK1 位42MHz;APB2 分频系数为/2 即 PCLK2 位 84MHz。 根据自己的项目名称命名,IDE选择MDK-ARM 配置完成后点击Generate Code,再点击OpenProject即可从keil打开软件中的项目
四、keil编程
由于我们的Debug用的是DAP,如图下选择Debug和下载配置
main函数
由于开发板按钮使用硬件抖动,不需要软件抖动,否则需要10ms软件消抖是左右延迟的。
/* USER CODE BEGIN WHILE */ while (1) {
/* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ /*等待KEY1按键按下*/ if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin) == RESET) {
/*等待KEY1按键释放*/ while(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin) == RESET) {
/*灭灯*/ HAL_GPIO_WritePin(LED_R_GPIO_Port,LED_R_Pin,GPIO_PIN_RESET); } } /*等待KEY2按键按下*/ if(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin) == RESET) {
/*等待KEY2按键释放*/ while(HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin) == RESET) {
/*亮灯*/ HAL_GPIO_WritePin(LED_R_GPIO_Port,LED_R_Pin,GPIO_PIN_SET);
}
}
}
/* USER CODE END 3 */
五、实验效果
编译烧录后即可,板上效果:板上红灯默认开启,按下KEY1灭灯,按下KEY2亮灯。