基于STM32_HAL库驱动GPIO实现按键控制外设
一、按键电路及原理
我们从原理图中可以看到,电路中有两个独立按键,它们分别连接到STM32的PA0和PA1这两个引脚,当按键被按下的时候PA0和PA1被拉低,所以我们只需要检测是否被拉低就可以了。
二、CubeMX配置
在之前的文章中我们已经知道了该如何创建CubeMX工程,包括选择哪款MCU,并且配置Debug模式,还有工程的路径、名称、输出方式等等,下面我们就直接配置STM32的GPIO就可以了
配置完之后我们就可以直接生成工程打开就可以了:
我们可以看到使用CubeMX点几下就可以把GPIO的初始化代码生成完毕了,真的是非常方便!
三、业务代码实现
我们要实现的业务逻辑是:按下按键一LED1亮,再按下LED1熄灭;按下按键二LED2亮,再按下LED2熄灭。
#include "main.h"
#include "gpio.h"
#define KEY_ON 0
#define KEY_OFF 1
/* 检测按键按下函数 */
uint8_t KEY_Input(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
{
if(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) == GPIO_PIN_RESET){ // 按键被按下
while(HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) == GPIO_PIN_RESET); //按键消抖
return KEY_ON;
}else{ // 按键没按下
return KEY_OFF;
}
}
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1)
{
if(KEY_Input(GPIOA, GPIO_PIN_0) == KEY_ON){ // 如果按键一被按下
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_8); // 翻转LED1的电平
}
if(KEY_Input(GPIOA, GPIO_PIN_1) == KEY_ON){ // 如果按键二被按下
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9); // 翻转LED2的电平
}
}
}
写完之后我们把代码编译,通过ST-LINK烧录进去,就可以实现我们想要的效果啦。