02 HAL库驱动按键响应外部中断

引言:这里我采用的实验平台可能跟大家的不太一样,文章的图像是一块资源拓展板, 主控板式fs_mp1a, 该板子的SOC是stm32mp157a, 有两个内核一个A7, 一个M4.但是实验的流程肯定都是一样的, 因为都是裸机程序嘛。

一、按键简介


        在单片机应用中,按键是一种常见的输入设备,用于接收用户的操作信号。按键通常由金属触点和弹簧组成,当按键被按下时,触点闭合,产生一个输入电平信号。

以下是关于单片机中使用的按键的一些简要说明:

1. 使用方法:按下按键,则按键闭合,单片机可以检测到按键的状态变化。可以通过轮询(Polling)或中断(Interrupt)的方式来检测按键的状态。

2. 接线方法:按键通常需要连接到单片机的IO口上。按键一端连接到单片机的IO引脚,另一端连接到电源或地线。为了防止按键抖动的干扰,可以在按键与IO引脚之间添加一个适量的电容或者使用软件消抖算法。

3. 按键状态检测: - 轮询方式:在主循环中通过查询IO口的电平状态来检测按键是否按下。缺点是资源浪费,需要不断轮询IO口,可能造成系统响应慢。 - 中断方式:通过将按键引脚配置为中断引脚,在按键状态改变时触发中断,单片机可以立即响应。这种方式能够减少对处理器资源的占用。

4. 按键的多功能应用:通过编程的方式,可以实现按键的多功能应用,例如单击、长按、双击等不同动作触发不同的事件。

5. 按键防抖:由于按键本身的物理性质,可能会出现按键抖动问题。为了消除抖动的影响,可以设置一个适当的延迟时间,在此时间范围内检测到按键的变化,才认定为有效按键。 总之,在单片机应用中,按键的使用可以方便地实现用户交互,增加了单片机系统的灵活性和可操作性。

二、 实验步骤


1. 查看按键原理图

可以看到, 当按键按下,与KEY1网络标号相连接的引脚读到的将是低电平

2. 配置工程

将KEY1对应的引脚配置为输入模式, 也可以将其配置为GPIO的外部中断模式, 这里也就是上面按键介绍的类中工作模式一种是轮询, 一种是中断异步的方式。这里采用的是第二种实验方式。

大家不要奇怪我的SOC的封装怎么这么奇怪, 这里给大家介绍一下SOC的常见封装。

SOC(System on a Chip)是指将所有系统功能集成到一颗芯片中的集成电路。它集成了处理器、存储器、外设接口、电源管理等功能,使得一个完整的计算系统能够放入一个单一的芯片中。SOC芯片是现代嵌入式系统中常见的核心组件。

常见的SOC封装有以下几种:

1. BGA(Ball Grid Array)封装:BGA封装是目前应用最广泛的封装之一,芯片底部有一定数量的焊点球形排列成网状,通过焊接与印刷电路板(PCB)相连接。它具有密集的引脚布局和良好的热散发能力,适用于高性能和高集成度的SOC芯片。

2. LGA(Land Grid Array)封装:LGA封装与BGA非常相似,芯片的引脚以方形或长方形排列在芯片底部,通过焊接连接到PCB。LGA封装通常比BGA封装更容易维修和更容易替换。 3. QFN(Quad Flat No-leads)封装:QFN封装是一种表面焊接封装,引脚位于封装底部的芯片引脚焊盘上,没有外露引脚。它具有尺寸小、体积小、成本低、性能良好等优点,适用于小型和低功耗的SOC芯片。

4. LQFP(Low-profile Quad Flat Package)封装:LQFP封装是一种具有四个平坦的边框和引脚的封装,引脚沿封装底部延伸。LQFP封装具有良好的热散发能力和可靠性,并且广泛应用于各种芯片封装。

5. CSP(Chip Scale Package)封装:CSP封装是一种非常紧凑的封装形式,芯片尺寸接近封装的尺寸,因此称为芯片级封装。它具有小尺寸、低成本、低功耗等优点,适用于小型和低功耗SOC芯片的集成。

这些是SOC芯片常见的几种封装类型,不同的封装具有不同的特点和适用场景,开发者可以根据具体需求选择合适的封装来设计和应用SOC芯片。

这里博主采用的实验平台是引脚处于soc下面的封装形式。

3. 函数编写

在这个位置可以找到我们的中断处理函数的定义

下面让我们一起追一下这个代码, 可以看到在这个中断处理函数中调用了别的函数, 这种函数的专业术语叫做非叶子函数。让我们跳过去看一下这个函数。

在这个函数中我们可以看到,这个函数根据我们设置的中断触发方式区分了一下调用的函数, 也就是图中光标的所在位置的那个函数。 

我们再跳转, 对了, 跳转时鼠标右键, 打开声明那一项。

 这个函数之前的__weak是一个__atrribute__参数属性, 这个符号的可以弱化这个函数符号, 当在整个的工程中出现这个函数名时, 也就是强符号, 就是我们可以对这个函数进行重写,类似C++中的多态, 这个__weak修饰的函数可以理解为基类中的虚函数。

接着我们对这个函数进行重写, 在里面完成我们想要的代码逻辑

void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
{if(GPIO_Pin == GPIO_PIN_9) {if(HAL_GPIO_ReadPin(GPIOF, GPIO_PIN_9) == GPIO_PIN_RESET) {GPIO_LED1_TOOGLE();GPIO_LED2_TOOGLE();GPIO_LED3_TOOGLE();}}
}

到这里还不算完, 记得根据自己实验的平台判断按键是否需要消去机械抖动。                                                                                                                                                                           

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html文件Js写输入框和弹框调接口jQuery

业务场景&#xff1a;需要使用写一个html文件&#xff0c;实现输入数字&#xff0c;保存调接口。 1、使用 JS原生写法&#xff0c; fetchAPI调接口&#xff0c;使用 alert 方法弹框会阻塞线程&#xff0c;所以写了一个弹框。 <!DOCTYPE html> <html lang"en"…

Android Studio下载gradle失败

1、打开Android Studio设置Gradle的地方&#xff0c;点击左上角的File->Settings查看gradle存放路径 C:\Users\Administrator.gradle\wrapper\dists\gradle-5.4.1-all\3221gyojl5jsh0helicew7rwx 2、找到正在下载的gradle版本&#xff0c;Android Studio取消下载gradle&…

JVM的生命周期

1.加载&#xff08;Loading&#xff09;&#xff1a; 在加载阶段&#xff0c;JVM会找到并加载Java字节码文件。加载阶段分为三个步骤&#xff1a;通过类的全限定名找到对应的字节码文件&#xff0c;创建一个与该类相关的Class对象&#xff0c;将类的静态数据结构存储在方法区中…

uniapp中uview组件库的丰富Upload 上传上午用法

目录 基础用法 #上传视频 #文件预览 #隐藏上传按钮 #限制上传数量 #自定义上传样式 API #Props #Methods #Slot #Events 基础用法 可以通过设置fileList参数(数组&#xff0c;元素为对象)&#xff0c;显示预置的图片。其中元素的url属性为图片路径 <template>…

【Image】超硬核数学推导——WGAN的先“破”后“立”

GAN的实现 上一篇文章中我们说到了GAN的数学解释 min ⁡ G max ⁡ D V ( D , G ) E x ∼ p data ( x ) [ log ⁡ D ( x ) ] E z ∼ p z ( z ) [ log ⁡ ( 1 − D ( G ( z ) ) ) ] − log ⁡ 4 2 J S D ( p data ∥ p g ) ≥ − log ⁡ 4 , where [ p d a t a p g ] \mi…

Vscode —— 解决Vscode终端无法使用npm的命令的问题

在cmd中可以正常执行npm -v等指令,但是在vs code终端中,无法执行npm -v,node -v等指令 出现报错 解决办法&#x1f447; 方法一&#xff1a;【右键单击Vscode】以【管理员身份运行】&#xff0c;【重启Vscode】 方法二&#xff1a;①【用户变量】的【path】添加npm所在路径的…

使用streampark进行flink on k8s LoadBalancer配置域名访问flink ui

在使用yarn部署flink任务时&#xff0c;yarn自动代理了flink web ui&#xff0c;通过yarn的地址即可访问任务web页面。 k8s模式下想访问flink web ui&#xff0c;要么使用NodePort的方式启动任务&#xff0c;然后通过k8s主机IPNodePort端口来进行访问。但是这种方法&#xff0…

LoongArch指令集-特权指令系统——摘抄自胡伟武体系结构和龙芯架构32位精简版参考手册

例外与中断 1 中断 1.1 中断类型 龙芯架构 32 位精简版下的中断采用线中断的形式。每个处理器核内部可记录 12 个线中断&#xff0c;分别是&#xff1a;1 个核间中断&#xff08;IPI&#xff09;&#xff0c;1 个定时器中断&#xff08;TI&#xff09;&#xff0c;8 个硬中断…

【Kubernetes】kubectl 常用命令

kubectl 常用命令 1.基础命令2.部署命令3.集群管理命令4.故障诊断与调试命令5.高级命令6.设置命令7.其他命令 kubectl 是 Kubernetes 提供的命令行管理工具。通过使用 kubectl&#xff0c;可以管理和操作 Kubernetes。 1.基础命令 命令 说明 create通过文件名或标准输入创建 …

迅软科技助力高科技防泄密:从华为事件中汲取经验教训

近期&#xff0c;涉及华为芯片技术被窃一事引起广泛关注。据报道&#xff0c;华为海思的两个高管张某、刘某离职后成立尊湃通讯&#xff0c;然后以支付高薪、股权支付等方式&#xff0c;诱导多名海思研发人员跳槽其公司&#xff0c;并指使这些人员在离职前通过摘抄、截屏等方式…

centos7安装nginx并安装部署前端

目录&#xff1a; 一、安装nginx第一种方式&#xff08;外网&#xff09;第二种方式&#xff08;内网&#xff09; 二、配置前端项目三、Nginx相关命令 好久不用再次使用生疏&#xff0c;这次记录一下 一、安装nginx 第一种方式&#xff08;外网&#xff09; 1、下载nginx ng…

Servlet入门

目录 1.Servlet介绍 1.1什么是Servlet 1.2Servlet的使用方法 1.3Servlet接口的继承结构 2.Servlet快速入门 2.1创建javaweb项目 2.1.1创建maven工程 2.1.2添加webapp目录 2.2添加依赖 2.3创建servlet实例 2.4配置servlet 2.5设置打包方式 2.6部署web项目 3.servl…

关于蚁剑(AntSword)的溯源反制

中国蚁剑(AntSword) RCE漏洞 此漏洞在AntSword2.7.1版本上修复 &#xff0c;所以适用于AntSword2.7.1以下版本。 下面介绍被低版本蚁剑攻击后如何进行溯源反打 以物理机为攻击机&#xff0c;虚拟机kali模拟受害者&#xff0c;之后使用kali进行溯源反制 物理机内网ip地址&…

Spring Data Redis对象缓存序列化问题

相信在项目中&#xff0c;你一定是经常使用 Redis &#xff0c;那么&#xff0c;你是怎么使用的呢&#xff1f;在使用时&#xff0c;有没有遇到同我一样&#xff0c;对象缓存序列化问题的呢&#xff1f;那么&#xff0c;你又是如何解决的呢&#xff1f; Redis 使用示例 添加依…

24、Qt使用QCustomPlot

一、下载文件 进入官网&#xff0c;选择“Download”、QCustomPlot.tar.gz Qt Plotting Widget QCustomPlot - Download 二、创建项目 创建一个"Qt Widget Application"项目&#xff0c;基类选择“QMainWindow”&#xff0c;把刚才下载的压缩包里的“qcustomplot.…

linux文件夹介绍

在linux内核文件夹下面存在着许多文件夹&#xff0c;那么那些文件夹是什么用处呢&#xff0c;下面将为你介绍。 (1)documentation 这个文件夹下没有内核代码&#xff0c;仅仅有一套实用的文档&#xff0c;但这些文档的质量不一。比如内核文档的文件系统&#xff0c;在该文件夹下…

Redis 快速搭建与使用

文章目录 1. Redis 特性1.1 多种数据类型支持1.2 功能完善1.3 高性能1.4 广泛的编程语言支持1.5 使用简单1.6 活跃性高/版本迭代快1.7 I/O 多路复用模型 2. Redis发展历程3. Redis 安装3.1 源码安装3.1.1 下载源码包3.1.2 解压安装包3.1.3 切换到 Redis 目录3.1.4 编译安装 3.2…

八皇后问题(C语言)

了解题意 在一个8x8的棋盘上放置8个皇后&#xff0c;使得任何两个皇后都不能处于同一行、同一列或同一斜线上。问有多少种方法可以放置这8个皇后&#xff1f; 解决这个问题的目标是找到所有符合要求的皇后摆放方式&#xff0c;通常使用回溯算法来求解。回溯算法会尝试所有可能…

用 Node.js 写一个爬虫

自己设计一个网站&#xff0c;然后去爬取别人家页面的数据来做一个自己的网站。哈哈哈&#xff0c;如果自己写着玩可能没啥事&#xff0c;但如果用这个网站来获利&#xff0c;你可能就要被寄律师函了&#xff0c;毕竟这有点‘刑’。这篇文章呢&#xff0c;就带大家爬取豆瓣TOP2…

STM32 ESP8266 物联网智能温室大棚 源码PCB原理图 设计文档

资料下载: https://download.csdn.net/download/vvoennvv/88680924 一、概述 本系统以STM32F103C8T6单片机为主控芯片&#xff0c;采用相关传感器构建系统硬件电路。其中使用DHT11温湿度传感器对温度和湿度的采集&#xff0c;MQ-7一氧化碳传感器检测CO浓度&#xff0c;GP2Y101…