STM32按键控制小灯—HAL库

2024-08-21 15:12
文章标签 stm32 控制 按键 hal 小灯

本文主要是介绍STM32按键控制小灯—HAL库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原理讲解:

以上是按键的原理图:(忽略GPIO口,因为可以自行设置)

需要注意的点有两个:

①100nF的电容:有效缓冲抖动的电平信号,有按键消抖的作用

什么是按键抖动呢?(简单来说就是按键中的接触点在接触或者断开的瞬间在很小的时间片段上处于一种似连非连、似断非断的状态)

        按键抖动是当你按下或松开按键时,接触点之间可能会发生多个微小的接触和分离,而不仅仅是一次单一的接触。

        这种快速的、多次的接触和断开会导致电路产生多个开关信号,从而引发误操作或错误信号输入。

        为了避免这种情况,通常会使用软件或硬件上的去抖动技术,将这些多个信号处理为一个有效信号。

        去抖动可以通过添加时间延迟、信号过滤等方法来实现,以确保系统只识别出按键的第一次触发,过滤掉后续的抖动信号。

(在没有外部硬件的条件下,我们就先使用添加时间延迟的办法来过滤抖动信号)

②上下拉电阻:

上拉操作:上拉操作需要使用一个电阻来配合,所以我们一般称这个电阻为上拉电阻

上拉电阻的作用是在当GPIO口设置为浮空输入模式的时候,为防止输入引脚处于不确定的状态(即浮空状态),我们加一个上拉电阻从而确保逻辑电平稳定。它通常被连接在输入引脚与电源电压之间

具体作用:

1. 稳定逻辑电平:在一些数字电路中,输入引脚可能会因为未连接到高电平或低电平而处于浮空状态,导致电平不明确。这时,上拉电阻会将该引脚拉到高电平,避免逻辑电平不稳定的情况。

2. 防止输入悬空:当输入引脚没有被驱动(如开关未闭合时),上拉电阻提供了一个稳定的高电平,这样即使输入设备未提供信号,电路也不会出现随机噪声或不确定状态。

        当GPIO口设置为浮空输入模式的时候输入引脚处于不确定的状态,GPIO口接入的单片机内部相当于有一个巨大的电阻,根据分压原理,R11电阻几乎不分压,此时GPIO口读到的就是高电平。当按键或开关未按下时,上拉电阻将输入引脚维持在高电平,按下时则将引脚拉到低电平,从而实现明确的信号状态。

下拉操作同理可得。

具体操作:

首先新建文档

输入芯片型号:STM32F103C8T6

新建文件名:KEY_LED--->点击Finish

来到配置界面,我们先将PB13和PA7引脚打开。

将PB13引脚设置为GPIO_input(因为我们想要将这个已经配置为上拉输入---以供按键控制)

将PA7设置为GPIO_Output

然后来到GPIO设置部分:将PB13设置为Pull-up(上拉输入模式),并命名为KEY

PA7如图。 

配置好后点击保存生成代码。

代码部分:

  /* Infinite loop *//* USER CODE BEGIN WHILE */while (1){if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET){HAL_Delay(10);if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)== GPIO_PIN_RESET){HAL_GPIO_TogglePin(LED_RED_GPIO_Port,LED_RED_Pin);while(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET){}}}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}

代码详解:

1. while (1)

这是一个无限循环,代码将在其中不断执行。通常用于嵌入式系统中,表示程序会一直运行,直到设备重启或关闭。

2. if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin) == GPIO_PIN_RESET)

HAL_GPIO_ReadPin是 STM32 HAL 库中的一个函数,用于读取指定引脚的电平状态KEY_GPIO_Port和 KEY_Pin是定义好的宏,分别表示按键所在的GPIO端口和引脚

(例如:#define KEY_GPIO_Port GPIOB  // 按键连接在GPIOB端口上)
GPIO_PIN_RESET通常表示低电平(即按键被按下的状态)。
这行代码的意思是:如果检测到按键被按下,则进入 `if` 语句块。

3. HAL_Delay(10);

HAL_Delay函数用于产生一个10毫秒的延时。
这是一个简单的去抖动处理。按键抖动现象可能会导致检测到的按键状态不稳定,延时10毫秒可以过滤掉短时间的抖动信号,确保按键状态稳定后再继续检测。

4. if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin) == GPIO_PIN_RESET)

在延时之后,再次读取按键的状态。如果按键仍然处于按下状态(低电平),则进入这个 if语句块。
这进一步确认按键确实被按下,而不是由于抖动导致的误判。

5. HAL_GPIO_TogglePin(LED_RED_GPIO_Port,LED_RED_Pin);

HAL_GPIO_TogglePin是一个用于切换引脚状态的函数。
这行代码的作用是切换红色LED灯的状态:如果LED当前是亮的,则熄灭;如果是熄灭的,则点亮。

6. while(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin) == GPIO_PIN_RESET){}

这个 while`循环用于等待按键被释放。只要按键处于按下状态(低电平),循环就会一直执行,不会退出。
这样可以避免在按键未释放时重复触发LED的切换动作。换句话说,按键每按下一次,LED只会切换一次状态。

这篇关于STM32按键控制小灯—HAL库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093516

相关文章

Python实现局域网远程控制电脑

《Python实现局域网远程控制电脑》这篇文章主要为大家详细介绍了如何利用Python编写一个工具,可以实现远程控制局域网电脑关机,重启,注销等功能,感兴趣的小伙伴可以参考一下... 目录1.简介2. 运行效果3. 1.0版本相关源码服务端server.py客户端client.py4. 2.0版本相关源码1

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32内部闪存FLASH(内部ROM)、IAP

1 FLASH简介  1 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 2 通过在程序中编程(IAP)实现程序的自我更新 (OTA) 3在线编程(ICP把整个程序都更新掉) 1 系统的Bootloader写死了,只能用串口下载到指定的位置,启动方式也不方便需要配置BOOT引脚触发启动  4 IAP(自己写的Bootloader,实现程序升级) 1 比如蓝牙转串口,

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

控制反转 的种类

之前对控制反转的定义和解释都不是很清晰。最近翻书发现在《Pro Spring 5》(免费电子版在文章最后)有一段非常不错的解释。记录一下,有道翻译贴出来方便查看。如有请直接跳过中文,看后面的原文。 控制反转的类型 控制反转的类型您可能想知道为什么有两种类型的IoC,以及为什么这些类型被进一步划分为不同的实现。这个问题似乎没有明确的答案;当然,不同的类型提供了一定程度的灵活性,但

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理

深入解析秒杀业务中的核心问题 —— 从并发控制到事务管理 秒杀系统是应对高并发、高压力下的典型业务场景,涉及到并发控制、库存管理、事务管理等多个关键技术点。本文将深入剖析秒杀商品业务中常见的几个核心问题,包括 AOP 事务管理、同步锁机制、乐观锁、CAS 操作,以及用户限购策略。通过这些技术的结合,确保秒杀系统在高并发场景下的稳定性和一致性。 1. AOP 代理对象与事务管理 在秒杀商品