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.mzph.cn/news/589194.shtml

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

相关文章

【PTA-C语言】实验七-函数与指针I

如果代码存在问题,麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 目录——实验七-函数与指针I 6-1 弹球距离(分数 10)6-2 使用函数输出一个整数的逆序数(分数 10)6-3 使用函数求最大公约数(分数 10)6-4…

Visual Studio 2015 中 SDL2 开发环境的搭建

Visual Studio 2015 中 SDL2 开发环境的搭建 Visual Studio 2015 中 SDL2 开发环境的搭建新建控制台工程拷贝并配置 SDL2 开发文件拷贝 SDL2 开发文件配置 SDL2 开发文件 测试SDL2 开发文件的下载链接 Visual Studio 2015 中 SDL2 开发环境的搭建 新建控制台工程 新建 Win32 …

从2023看2024前端发展趋势

前言 流光溯影,纵观2023全年,整个前端业界呈现出百业凋零之状,更不乏有“前端已死”等论调甚嚣尘上。从全局视角看IT行业,除了AI领域的大语言模型爆发外,整体都鲜有特别亮眼及突出的技术展现。故而,作为IT…

【华为机试】2023年真题B卷(python)-猴子爬山

一、题目 题目描述: 一天一只顽猴想去从山脚爬到山顶,途中经过一个有个N个台阶的阶梯,但是这猴子有一个习惯: 每一次只能跳1步或跳3步,试问猴子通过这个阶梯有多少种不同的跳跃方式? 二、输入输出 输入描述…

深度学习核心技术与实践之计算机视觉篇

非书中全部内容,只是写了些自认为有收获的部分 计算机视觉背景 (1)视觉皮层的神经元是一列一列组织起来的,每一列神经元只喜欢某一种特定的形状或者某些简单的线条组合,而不是鱼、老鼠、鲜花 (2&#xf…

记矩阵基础概念

转自up:Naruto_Qcsdn:三维空间几何变换矩阵 先贴个站里分享的基础概念。 learn form 肥猫同学VFX b站:会用transform就会用矩阵 移动 旋转 缩放 1.transofrm ——输出变化矩阵 可以移动transform查看变化去理解 位移 缩放 旋转 由此—…

一个有趣的MOSFET电路-触摸调光电路

来源 刷B站视频,看到一个很新奇的“触摸调光电路”,电路图如下: 视频在这里,只使用了3个元件。 刚好最近在学模拟电路的 MOSFET,我之前的理解是 MOSFET 的控制电压应该加在 Gate 和 Source 之间,也就是 栅…

【ES】es介绍,使用spring-boot-starter-data-elasticsearch整合的ES来进行操作Es

文章目录 倒排索引(Inverted Index)和正排索引(Forward Index)es和MySQL对比IK分词器的总结mapping映射使用springboot整合的ES来进行操作Es1. 实体类中添加注解2. 编写Repository层3. 通过Repository进行增删改查 倒排索引&#…

2023年年度总结,一个小白的CSDN涨粉历程

前言 滚滚长江东逝水,一去不复返。 转眼间已到2024年节点,时间如滚滚长江水向东奔流不息,在长江消失之前,都不会停歇,也不会回头。人亦如此,不管是生活还是学习,都是不断往前走的过程&#xff…

VMware虚拟机之文件夹共享jdk和tomcat安装防火墙设置

目录 一. 配置文件夹共享功能 1.1 为什么需要配置文件夹共享功能 1.2 配置文件共享功能 1.3 普通共享和高级共享的区别 1.3.1 普通共享 1.3.2 高级共享 1.3.3 总结 二. jdk的配置 2.1 安装jdk 2.2 配置jdk的环境配置jdk 2.3 配置成功 三. TomCat的配置 四. 防火墙设置 4.1…

java生产设备效率管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web生产设备效率管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为ac…

【SD】一致性角色 - 同一人物 不同姿势 - 2

首先生成4张不同姿势的图片 masterpiece,high quality,(white background:1.6),(simple background:1.4),1gril,solo,black footwear,black hair,brown eyes,closed mouth,full body,glasses,jacket,long hair,long sleeves,lookig at viewer,plaid,plaid skirt,pleated shirt,…

记录 Docker 中安装 ROS2

目录 1 安装 Docker 2 安装 ROS2 3 启动 Docker 4 测试 ROS2 环境 1 安装 Docker 1. 更新软件包sudo apt updatesudo apt upgrade2. 安装 docker 依赖sudo apt-get install ca-certificates curl gnupg lsb-release3. 添加 docker 官方 GPG 密钥curl -fsSL http://mirror…

VUE——IDEA 启动前端工程VS文件启动前端工程

IDEA 启动前端 目录 前言一、打开控制台二、输入npm install三、依赖下载完之后,输入npm run dev,运行前端项目1、IDEA启动前端工程2、文件目录启动前端工程 四、点击http://localhost:8080后续敬请期待 前言 启动已有的vue前端项目 一、打开控制台 选…

【解决复杂链式任务打造全能助手】大模型思维链 CoT 应用:langchain 大模型 结合 做 AutoGPT

大模型思维链 CoT 应用:langchain 大模型 结合 做 AutoGPT,解决复杂链式任务打造全能助手 思维链 CoTlangchainlangchain 大模型结合打造 AutoGPT 思维链 CoT 最初的语言模型都是基于经验的,只能根据词汇之间的相关性输出答案,根…

【分库分表篇】分区和分表的区别

分区和分表的区别 ✔️ 解析✔️拓展知识仓✔️分区的方式✔️MySQL 数据库支持的分区类型为水平分区 ✔️ 解析 数据库中数据量过多,表太大的时候,不仅可以做分库分表,还可以做表分区,分区和分表类似,都是按照一定的规…

Vue-Setup

一、setup概述 小小提示&#xff1a;vue3中可以写多个根标签。 Person.vue中内容 <template><div class"person"><h2>姓名&#xff1a;{{name}}</h2><h2>年龄&#xff1a;{{age}}</h2><!--定义了一个事件&#xff0c;点击这…

PyTorch常用工具(2)预训练模型

文章目录 前言2 预训练模型 前言 在训练神经网络的过程中需要用到很多的工具&#xff0c;最重要的是数据处理、可视化和GPU加速。本章主要介绍PyTorch在这些方面常用的工具模块&#xff0c;合理使用这些工具可以极大地提高编程效率。 由于内容较多&#xff0c;本文分成了五篇…

一起学量化之KDJ指标

KDJ指标,也称为随机指数,是一个常用的技术分析工具。它由三条线组成:K线、D线和J线,分别代表不同的市场动态。KDJ指标通过分析最高价、最低价和收盘价计算得出。 1. KDJ指标理解 J线是移动速度最快的线,可以提供更加敏锐的市场信号。K线是指标的核心,显示市场的即时动态。…

[每周一更]-(第46期):Linux下配置Java所需环境及Java架构选型

Linux下配置Java所需环境及Java架构选型 一、配置基础环境 1.配置tomcat 环境变量 wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.8/src/apache-tomcat-10.1.8-src.tar.gz tar -zxvf apache-tomcat-10.1.8-src.tar.gz 在/etc/profile 末尾追加export CATALINA_HOME…