GPIO详解:不仅仅是输入输出那么简单

在这里插入图片描述

“别小看一个小小的引脚,它可是 MCU 世界的社交之门。”


👋 先打个招呼:什么是 GPIO?

GPIO,全称是 General Purpose Input/Output —— 通用输入输出口。

简单说,它就像 MCU 身上的“手指”:

  • 输入模式:它能感知外部世界(比如按键按下)
  • 输出模式:它能控制外部设备(比如点亮LED)

别以为它只是通电/断电!
GPIO 的“本领”比你想象的多很多!


🧠 GPIO 的核心概念梳理

概念通俗解释
输入模式“耳朵”——用来接收信号
输出模式“手”——用来发出信号
上拉/下拉默认信号状态,不悬空就靠它
推挽输出能输出高电平也能输出低电平
开漏输出只能拉低,靠外部上拉输出高
复用功能“兼职”的引脚,比如串口、I2C、PWM等
中断功能引脚也能“打断”主程序,成为中断源
速度设置并不是说跑步,而是电气变化的快慢(驱动能力)

⚡ 输入模式:不是你以为的那么简单

GPIO_MODE_INPUT

输入模式一般配合 上拉下拉 使用:

场景原因
内部上拉防止引脚悬空漂移,默认为高电平
内部下拉保持引脚为低电平,适合低有效按键
无上拉下拉用外部电路控制,或用于模拟输入

举个例子:你用按键接 GND,那就要设置为“输入 + 上拉”,按下时变低电平。


💡 输出模式:推挽 vs 开漏

🚀 推挽输出(GPIO_MODE_OUTPUT_PP)

在这里插入图片描述

能把引脚拉高也能拉低,适合控制 LED、继电器等。

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 输出高

🌪 开漏输出(GPIO_MODE_OUTPUT_OD)

只能拉低,拉高需要靠外部上拉电阻。

适合做I2C总线、多个设备共用一根线的场景


🧬 复用模式:GPIO 的“分身术”

你定义的是 GPIO,其实它暗地里还兼职着:

  • USART_TX/RX(串口通信)
  • I2C_SCL/SDA(I2C 通信)
  • PWM 输出
  • ADC 输入
  • 外部中断 EXTI

这就需要设置为 GPIO_MODE_AF_xx 模式(AF = Alternate Function)

👉 一个引脚,多种身份,选谁就看配置!


⏱️ GPIO的输出速度有啥用?

STM32等平台经常让你选:

  • GPIO_SPEED_FREQ_LOW
  • GPIO_SPEED_FREQ_MEDIUM
  • GPIO_SPEED_FREQ_HIGH

这并不是 MCU 执行速度,而是 引脚电气输出的上升/下降沿速度

  • 太快:可能引起信号串扰、干扰(尤其在长线上)
  • 太慢:可能带不动外设,波形变形

推荐做法:

用途推荐速度
普通LEDLow
SPI/I2C/PWMMedium or High
驱动高速信号/屏幕High

🔧 中断功能:GPIO也能做触发器!

某些 GPIO 支持外部中断,比如 STM32 的 EXTI(External Interrupt)。

配置为:

GPIO_MODE_IT_FALLING     // 下降沿触发
GPIO_MODE_IT_RISING      // 上升沿触发
GPIO_MODE_IT_RISING_FALLING // 双边触发

然后写 ISR(中断服务函数)即可对按钮、电平变化做出及时响应


📦 特殊功能小结(不同MCU略有不同)

特性说明
锁定 GPIO防止误改配置(STM32 有 GPIOx_LCKR)
上电默认态GPIO 默认可能是浮空,要谨慎使用
电流驱动能力有的 GPIO 可驱动几十 mA,有的却只能带小负载
复用限制某些 GPIO 只能用于特定功能,不可乱配(查看芯片手册)

🧪 实战小练习建议

在这里插入图片描述

练习项目技能点
点亮一个LED推挽输出
按下按钮点亮灯输入 + 中断
软件控制蜂鸣器输出控制、PWM复用
用一根线控制多个设备开漏输出 + 上拉
软件模拟串口开漏 + 中断 + 复用

🧠 一句话总结

“GPIO,是MCU和世界沟通的最小单元,掌握它,你才能真正掌握嵌入式的‘肌肉’。”


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

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

相关文章

深度学习5(深层神经网络 + 参数和超参数)

深层神经网络简介 深层神经网络是机器学习中一种重要的模型,它通过增加网络的“深度”(即隐藏层的数量)来提升模型对复杂数据的表示和学习能力。同浅层类似,也分为三个部分: 输入层:接收原始数据&#xff…

时间复杂度与空间复杂度分析

一、什么是复杂度? 1.1 为什么需要复杂度分析? 假设你写了两个程序来解决同一个问题,如何判断哪个程序更好?我们不能只看运行时间,因为: 不同电脑性能不同同一电脑在不同时刻状态也不同数据规模不同&#x…

上下文工程:从提示词到自动化流程的AI应用新范式

上下文工程:从提示词到自动化流程的 AI 应用新范式 一、背景与概述:从提示词工程到上下文工程的演进 随着大语言模型 (LLM) 技术的飞速发展,AI 应用开发正经历从 “提示词工程”(Prompt Engineering) 到 “上下文工程”(Context Engineerin…

HTML网页应用打包Android App 完整实践指南

技术准备与工具下载 必需工具清单 在开始之前,需要准备以下开发工具: Android Studio官网:https://developer.android.com/studio HBuilderX官网:https://www.dcloud.io/hbuilderx.html 离线SDK下载:https://nati…

简单 Python 爬虫程序设计

爬虫是获取网页数据的常用工具,我们一起来设计一个基于 requests 和 BeautifulSoup 的简单爬虫,它可以获取网页内容并提取文本信息。 所需库安装 首先需要安装两个必要的库: pip install requests beautifulsoup4 完整代码 import reques…

AUTOSAR图解==>AUTOSAR_AP_EXP_ARAComAPI

AUTOSAR ara::com API详解 自适应平台通信API技术详解 目录 1. 概述2. ara::com API架构 2.1 Proxy/Skeleton架构2.2 通信方式2.3 服务连接方式 3. 详细API说明 3.1 Proxy类3.2 Skeleton类3.3 实例标识符3.4 通信组 4. ara::com API状态管理 4.1 服务生命周期4.2 事件与方法状…

Spring Boot + 本地部署大模型实现:优化与性能提升

在将大语言模型集成到 Spring Boot 应用中时,性能优化是一个关键环节。本地部署的大模型虽然提供了强大的功能,但也可能带来一些性能挑战,如响应时间较长、资源占用较高等问题。本文将介绍如何在 Spring Boot 应用中优化本地部署大模型的性能…

QML 鼠标只响应左键处理方法

【1】问题描述 默认情况下qml支持左键,如果需要支持右键,甚至是中键那需要设置 【2】设置方法 MouseArea{ id: mouse anchors.fill: parent property int cx: 0 pr…

北方算网亮相2025全球数字经济大会|共绘数字友好城市建设

7月2日,以“建设数字友好城市”为主题的2025全球数字经济大会隆重开幕,为构建技术与人、城市与生态和谐共进的全球数字经济新生态提供交流合作平台。自7月3日开始,北方算网将在大会集中亮相,先后在多个论坛中发表主题演讲&#xf…

Android PNG/JPG图ARGB_8888/RGB_565‌解码形成Bitmap在物理内存占用大小的简单计算

Android PNG/JPG图ARGB_8888/RGB_565‌解码形成Bitmap在物理内存占用大小的简单计算 Android的Bitmap 是一个用于表示图像数据的核心类,代表一张图片在内存中的存储,Bitmap存储了图像的像素信息数据。 Bitmap把图像理解为像素点组成的二维矩阵&#xff…

力扣网编程55题:跳跃游戏之逆向思维

一. 简介 前面一篇文章使用贪心算法解决 力扣网55题:跳跃游戏,文章如下: 力扣网编程55题:跳跃游戏之贪心算法-CSDN博客 二. 力扣网编程55题:跳跃游戏之逆向思维 给你一个非负整数数组 nums ,你最初位于数…

苍穹外卖--day12数据统计-Excel报表

1.工作台1.1实现思路工作台是系统运营的数据看板,并提供快捷操作入口,可以有效提高商家的工作效率。工作台展示的数据:①今日数据②订单管理③菜品总览④套餐总览⑤订单信息名词解释:①营业额:已经完成订单的总金额②有…

鸿蒙应用开发:从网络获取数据

一、网络状态概述上述任一指标的变化均可视为网络状态的改变 二、获取网络信息 创建网络对象 //创建网络对象 //?表示可传可不传 connection.createNetConnection(netSpecifier?:NetSpecifier,timeout?:number):NetConnection;获取默认激活网络及其能力 //获取默认激活网络 …

探索开源虚拟 Excel 函数模块:Python 中的 Excel 功能利器

在数据处理和分析的领域中,Excel 一直是一款备受青睐的工具,它提供了丰富多样的函数,帮助用户高效地完成各种数据操作。而现在,我(董翔)开发一个基于 Python 的虚拟 Excel 函数模块,它将 Excel …

开源 vGPU 方案 HAMi: corememory 隔离测试

本文主要对开源的 vGPU 方案 HAMi 的 GPU Core&Memory 隔离功能进行测试。 省流: HAMi vGPU 方案提供的 Core&Memory 隔离基本符合预期: Core 隔离:Pod 能使用的算力会围绕设定值波动,但是一段时间内平均下来和申请的 g…

openstack安装并初始化

openstack安装并初始化openStack 概述OpenStack 起源什么是Openstackopenstack优势使用本地仓库离线安装系统基本环境设置为系统设置本地仓库创建openstack-train的仓库更新系统安装部署工具一键安装设置桥接网络通过 Dashboard 体验 OpenStack 功能创建云主机创建网络(1)用adm…

解决 Cannot create Swift scratch context

场景复现 Xcode 控制台输出: Cannot create Swift scratch context (couldnt create a Clang Importer)Analysis 分析 发生了什么? 在调试 Swift 代码或在 LLDB 里执行 po/expr 命令时,LLDB 需要为表达式临时创建一份 “Swift scratch co…

机械时代的计算

1、机械计算起源 最近在想平衡三进制的除法,想看看那么大牛是怎么做的,资料很少,但还是有的,有但是看不懂,也不知靠不靠谱,后面跟着实践了能行,下面就看看Balanced Ternary Arithmetic&#xff…

相机光学(四十八)——渐晕

1.什么是渐晕 渐晕,又称“光衰减”,在光学和摄影中很常见,简单来说就是与中心相比,图像角落变暗。渐晕要么是由光学引起的,要么是在后期处理中故意添加的,目的是将观看者的视线从角落的干扰物吸引到图像的中…

LabVIEW多通道阻抗测试仪

LabVIEW集成 Keysight 数字万用表与 NI 矩阵开关卡,构建多通道阻抗测试系统,实现设备连接电缆的多芯阻抗自动化测试,涵盖数据采集、分析、记录与显示功能,适用于高精度阻抗检测场景,展现LabVIEW在仪器控制与自动化测试…