STM32按键控制小灯—HAL库

news2024/11/22 18:50:49

原理讲解:

以上是按键的原理图:(忽略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只会切换一次状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2059370.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年蓝牙耳机哪个牌子最值得买?最建议入手的四个品牌型号推荐

随着科学技术的不断发展,蓝牙耳机已经逐渐成为市场上的智能配件选择,其市场份额也在不断增长。但是,在众多品牌中,很多的蓝牙耳机会出现音质不佳、连接不稳定的问题,甚至可能对消费者的听力造成潜在风险。那么&#xf…

openai api key automatically rotating when deployed

题意:部署时自动轮换 OpenAI API 密钥 问题背景: Im building a web page using openai gpt API in reactjs. I saved my API key on .env file then gitignored it. And I deployed my code with gh-pages, but openai detects it and rotate the key …

一文详解:线索分配的3种策略

针对企业经常投放的平台和渠道(如抖音、快手、公众号、官网等),纷享销客搭建了多平台接口与CRM互通,多渠道的线索可实时同步到CRM系统中。经过前面的线索分层处理,线索再根据不同线索池分配规则或者自定义分配规则设计,将线索下发给相关方处理…

银行总分支文件分发系统:在安全与效率之间找到平衡

银行的组织结构通常根据其规模、业务范围和地域分布而有所不同,但一般会包括以下几个层级:总行-区域总部或分行-分行-支行-业务中心或服务中心-国际分支机构-附属机构或子公司。 在日常中,存在总分支文件分发的业务场景,文件类型通…

盘点8大跨境电商平台发展前景及选品分析(Shopee、eBay篇)

跨境电商行业在全球范围内持续发展,各大平台各有特色,针对不同的市场和消费者群体提供多元化的服务。以下是亚马逊、Shopee、TikTok、TEMU、速卖通、eBay、Lazada、SHEIN这八大跨境电商平台的背景、主要针对群体、消费者购物偏好及选品建议的简要介绍&am…

RIPRO主题美化-首页底部纯标题文章展示模块+网站统计模块美化 WordPress主题美化

教程 1、找到wp-content/themes/ripro/assets/css/diy.css并将附件内的diy.css内容整体复制进去并保存 2、找到wp-content/themes/ripro/parts/home-mode/ulist.php并将附件内的ulist.php上传进去替换即可 3、找到wp-content/themes/ripro/functions.php并将附件内的functio…

解析京东JD商品详情API返回值

京东平台 API 返回值可以在多个方面进行实战应用,以下是一些常见的场景: 应用领域详细描述商品管理- 库存监控:通过返回的库存数据,及时掌握库存数量,设置预警并合理安排补货,同时分析库存变化趋势以优化库…

SAP PO平台的接口资产目录管理及协作案例(基于AIM平台)

一、客户背景 某客户现在的各个系统数量较多,系统接口已全部接入SAP PO中间件软件进行统一性管理。 但由于SAP PO系统的可视化和对多组织、多用户的协作能力较弱,遂使用AIM软件针对各个不同的系统接口做出API规范,并生成接口资产目录&…

存储管理功能

在这里插入图片描述

DevOps入门(下)

原文阅读:【巨人肩膀社区博客分享】DevOps入门 3: 创建项目 代码在本地修改----提交到远程gitee----触发jenkins整个自动化构建流程(打包,测试,发布,部署) 创建spring_boot项目 创建git仓库&…

便宜的电容笔推荐:2024返校季精选五款平价又好用的iPad电容笔!

近几年,随着无纸化学习的日益普及,电容笔的重要性也逐渐凸显。但是,原版电容笔的价格过高,对于很多学生党而言,寻找一款平价又好用的iPad电容笔就成了最优的选择。可是市面上的品牌很多,辨别优质产品的难度…

以简单的例子从头开始建spring boot web多模块项目(一)

目的:从头梳理,如何手工从头建立多模块项目。 步骤: 1、建立maven项目,类型:maven Archetype,Name:ParentDemo 选择JDK版本,Archetype:org.apache.maven.archetypes:maven-archetype-quickstart…

成都无人机飞手考证详解及前景分析

一、考证详解 1.1 考证背景与重要性 随着无人机技术的迅猛发展,无人机在航拍、农业、救援、物流等多个领域展现出广泛应用价值。为了规范无人机行业,保障公共安全和空域秩序,国家对无人机操作员实施了严格的资格认证制度。考取无人机飞手证…

公司员工电脑桌面太乱如何解决?桌面管理软件一招解决!

“工欲善其事,必先利其器。” 在数字化管理的时代背景下,选择合适的桌面管理软件就如同为企业网络管理装上了一双慧眼。 员工的电脑桌面往往因为长时间的使用而变得杂乱无章,这不仅影响了工作效率,还可能给企业信息安全带来隐患。…

Kali Linux 三种网络攻击方法总结(DDoS、CC 和 ARP 欺骗)

一、引言 在当今数字化的时代,网络安全成为了至关重要的议题。了解网络攻击的方法和原理不仅有助于我们增强防范意识,更是网络安全领域专业人员必备的知识。Kali Linux 作为一款专为网络安全专业人员和爱好者设计的操作系统,提供了丰富的工具…

DevOps入门(上)

1: DevOps概念 DevOps: Development 和 Operations 的组合 DevOps 看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。 突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使…

【AI绘画】Midjourney前置指令/settings设置详解

文章目录 💯Midjourney前置指令/settings设置详解💯Use the default model(AI绘画所使用的大模型)Midjourney Model(Midjourney 模型)Niji Model(Niji模型) 💯Midjourney…

NLP实战三:Pytorch实现FastText文本分类

NLP实战一:Pytorch实现TextCNN文本分类 NLP实战二:Pytorch实现TextRNN 、TextRNNAttention文本分类 中文数据集 我从THUCNews中抽取了20万条新闻标题,已上传至github,文本长度在20到30之间。一共10个类别,每类2万条…

什么是品牌低价 低价要如何处理

在消费领域,当消费者遭遇商品价格混乱不堪的局面,他们大可以选择敬而远之,放弃购买。但对于品牌商而言,若线上出现低价、乱价的情况,若坐视不管,那必然会引发一系列严重后果。 品牌若是对线上的低价、乱价现…

IP报文详解

IP的作用 上一篇文章提到TCP的可靠传输机制,那么TCP有把数据从主机A到主机B的能力吗?答案是没有。而IP有这个能力,IP能够将数据从主机A跨网络传输到主机B的能力。那么一定能传输成功吗?答案肯定是否定的,会因为各种原…