STM32按键控制LED灯-HAL库

前言

空窗了一年,重头再来点个灯吧,本篇文章将主要给大家讲解按键点灯

一、原理图设计

LED0-LED2 --------> PA0-PA2引脚

KEY1 ---------> PA3引脚

二、CubeMX的设置

LED选择GPIO一次将PA0、PA1、PA2设置为GPIO_Output,输出电平为低电平Low
key1选择GPIO将PA3设置为GPIO_Input,引脚设置为上拉Pull-up

 三、代码调试

main.c

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint8_t Key_val = 0; //定义全局变量,用来存键盘的返回值

uint8_t Key_scan(void)
{
	uint8_t key_val = 0; //定义返回值变量
	/*读取引脚角度状态*/
	if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_3) == 0 ) //当按键按下时,电平为0
	{
		HAL_Delay(10);//消抖
		if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_3) == 0 ) //检测按键松手情况
		{
			key_val =1;
		}
	}
	return key_val;
}
/* USER CODE END 0 */
while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		Key_val = Key_scan(); //不断读取建码值,放在定义的全局变量Key_val里
		if(Key_val == 1)
		{
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_SET);  //高电平 亮
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET);
		}
		else
		{
			HAL_GPIO_WritePin(GPIOA,GPIO_PIN_0,GPIO_PIN_RESET); //低电平 灭
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
            HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET);
		}
  }
  /* USER CODE END 3 */
}

  • 13
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
好的,以下是使用HAL库控制STM32按键控制LED的示例代码: 首先需要在STM32CubeMX中配置GPIO引脚,将按键和LED分别连接到不同的引脚上,并且使能相应的时钟。 然后在main.c中添加以下代码: ```c #include "stm32f4xx_hal.h" #define LED_PIN GPIO_PIN_5 #define LED_PORT GPIOA #define BUTTON_PIN GPIO_PIN_0 #define BUTTON_PORT GPIOB int main(void) { HAL_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = LED_PIN; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(LED_PORT, &GPIO_InitStruct); GPIO_InitStruct.Pin = BUTTON_PIN; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(BUTTON_PORT, &GPIO_InitStruct); while (1) { if (HAL_GPIO_ReadPin(BUTTON_PORT, BUTTON_PIN) == GPIO_PIN_RESET) { HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_SET); } else { HAL_GPIO_WritePin(LED_PORT, LED_PIN, GPIO_PIN_RESET); } } } ``` 代码中,LED_PIN和LED_PORT分别对应LED的引脚和端口,BUTTON_PIN和BUTTON_PORT分别对应按键的引脚和端口。 在while循环中,通过HAL_GPIO_ReadPin函数读取按键的状态,如果按键被按下,则通过HAL_GPIO_WritePin函数点亮LED,否则灭掉LED。 需要注意的是,代码中使用了GPIO_PULLUP上拉电阻,因此按键需要连接到GND才能被检测到。如果使用GPIO_PULLDOWN下拉电阻,则需要将按键连接到VCC才能被检测到。 希望可以帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值