STM32F407霸天虎HAL库学习笔记——按键检测

STM32F407霸天虎HAL库学习笔记——按键检测

  • 一、软件准备
  • 二、硬件准备
  • 三、CubeMX配置
  • 四、keil编程
    • main函数
  • 五、实验效果

一、软件准备

可以看上一篇的软件准备

二、硬件准备

STM32F407霸天虎

DAP下载器

三、CubeMX配置

野火霸天虎用的主控芯片是STM32F407ZGT6
在这里插入图片描述
RCC选择外部高速时钟
在这里插入图片描述
Debug要选择Serial Wire,否则就只能烧录一次
在这里插入图片描述

按键机械触点断开、闭合时,由于触点的弹性作用,按键开关不会马上稳定接通或一下子断开,使用按键时会产生(如下图)中的带波纹信号,需要用软件消抖处理滤波,不方便输入检测。霸天虎开发板连接的按键带硬件消抖功能,见原理图,它利用电容充放电的延时,消除了波纹,从而简化软件的处理,软件只需要直接检测引脚的电平即可。

STM32F407霸天虎HAL库学习笔记——按键检测_第1张图片
根据原理图可知,按键1在PA0,按键2在PC13,这些按键在没有被按下的时候,GPIO 引脚的输入状态为低电平 (按键所在的电路不通,引脚接地),当按键按下时,GPIO 引脚的输入状态为高电平 (按键所在的电路导通,引脚接到电源)。只要我们检测引脚的输入电平,即可判断按键是否被按下。
STM32F407霸天虎HAL库学习笔记——按键检测_第2张图片
配置Key1,Key2的GPIO模式为输入模式(浮空输入),无需上下拉
STM32F407霸天虎HAL库学习笔记——按键检测_第3张图片

根据原理图可以知道,开发板的LED引脚在PF6,7,8上,除此之外还有一个PC3的蓝色LED灯,都为低电平点亮
在这里插入图片描述
本次实验只用到了红灯,所以只需要配置PF6就可以了
STM32F407霸天虎HAL库学习笔记——按键检测_第4张图片

转跳到时钟树配置,STM32F407ZGT6的最大时钟频率是168MHz,开发板的外部晶振为 25MHz,我们填入 25;通道选择 LSE;PLLM 选择为/25;倍频系数 N 选择为 x336;系统时钟选择 PLLCLK;系统时钟设定为 168Mz;APB1 分频系数选择为/4 即 PCLK1 位42MHz;APB2 分频系数选择为/2 即 PCLK2 位 84MHz。
在这里插入图片描述
根据自己的项目名称命名,IDE选择MDK-ARM
STM32F407霸天虎HAL库学习笔记——按键检测_第5张图片
在这里插入图片描述
配置完成后点击Generate Code,再点击OpenProject即可从keil软件中打开该工程
STM32F407霸天虎HAL库学习笔记——按键检测_第6张图片

四、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 */

HAL_GPIO_WritePin函数作用是将写入指定的GPIO电平
HAL_GPIO_ReadPin的函数作用是读取GPIO的输入电平

五、实验效果

编译烧录后即可,板上效果:板上红灯默认开启,按下KEY1灭灯,按下KEY2亮灯。

你可能感兴趣的:(STM32,HAL库,STM32F407,stm32,单片机,学习)