嵌入式硬件: GPIO与二极管基础知识详解
1. 前言
在嵌入式系统和硬件开发中,GPIO(通用输入输出)是至关重要的控制方式,而二极管作为基础电子元件,广泛应用于信号整流、保护电路等。本文将从基础原理出发,深入解析GPIO的输入输出模式,包括高电平、低电平、高阻态,以及推挽与开漏的区别和实际应用。此外,介绍PMOS与NMOS的基本概念,帮助读者理解其在GPIO控制中的作用。
2. 二极管基础
2.1 PN结的单向导电性
二极管的基本原理是PN结的单向导电性。PN结由P型半导体和N型半导体组成,在其内部形成了空间电荷区,使得PN结在无外加电压时处于电荷平衡状态。
当对PN结施加正向电压时:
- P区的空穴向PN结方向移动,与N区的电子进行复合,使PN结变窄。
- 随着外加电压增大,扩散运动增强,漂移运动减弱。
- 当电压超过门槛电压(硅二极管约0.7V,锗二极管约0.3V),PN结导通,相当于一个小电阻。
当对PN结施加反向电压时:
- P区的空穴远离PN结,N区的电子远离PN结,使PN结变宽,无法形成导通。
- 只有微小的反向饱和电流通过,二极管表现为高阻状态。
3. MOSFET基础(PMOS与NMOS)
3.1 NMOS(N沟道MOSFET)
- 工作原理:
- 当栅极电压高于源极电压(Vgs > Vth)时,NMOS导通,电流从漏极流向源极。
- 当栅极电压低于阈值电压(Vth)时,NMOS关闭,相当于高阻态。
- 特点:
- 适用于低侧开关,常用于开漏模式。
- 当控制信号为高电平时,NMOS导通;低电平时关闭。
3.2 PMOS(P沟道MOSFET)
- 工作原理:
- 当栅极电压低于源极电压(Vgs < Vth)时,PMOS导通,电流从源极流向漏极。
- 当栅极电压高于阈值电压时,PMOS关闭,相当于高阻态。
- 特点:
- 适用于高侧开关,常用于推挽模式。
- 当控制信号为低电平时,PMOS导通;高电平时关闭。
4. GPIO基础
4.1 GPIO的输入与输出模式
GPIO(General-Purpose Input/Output)是嵌入式系统中的通用输入输出接口,具有以下基本模式:
- 高电平(High)
- 低电平(Low)
- 高阻态(High Impedance, Hi-Z)
高阻态的作用:
- 避免影响外部电路,当GPIO处于高阻态时,外部电路不会受到干扰。
- 与外部上拉电阻配合,让信号线被动拉高到指定电压(如3.3V)。
- 多个设备共用信号线,如I²C总线,允许多个器件控制同一根线而不会互相影响。

4.2 GPIO输入模式
GPIO可配置为输入模式,用于读取外部信号。
- 上拉输入:内部连接上拉电阻,默认读取高电平。
- 下拉输入:内部连接下拉电阻,默认读取低电平。
- 浮空输入:无内部上拉/下拉,受外部电路影响。
4.3 GPIO的两种输出模式:推挽与开漏
GPIO的驱动模式主要包括 推挽(Push-Pull) 和 开漏(Open-Drain/Collector)。
4.3.1 推挽输出模式
推挽模式通常由NMOS和PMOS组成,当需要输出高电平时,PMOS导通,NMOS关闭;当需要输出低电平时,NMOS导通,PMOS关闭。

推挽模式的特点:
- 能够提供较大的输出电流,直接驱动负载。
- 无需外部上拉电阻,输出驱动能力较强。
- 适用于直接控制LED、蜂鸣器等负载。
4.3.2 开漏输出模式
开漏模式仅能输出低电平或高阻态,不能直接输出高电平。

开漏模式的特点:
- 不能直接输出高电平,需要外部上拉电阻。
- 适用于多个设备共享信号线(如I²C总线)。
- 适用于不同电压等级的设备互联。
开漏模式的应用
(1) 5V单片机控制3.3V设备
假设GPIO的高电平为5V,而被控制芯片的 ENABLE 引脚仅支持3.3V,则直接使用推挽模式可能损坏芯片。
解决方案:
- 采用开漏模式,并在外部接3.3V上拉电阻。
- 当NMOS关闭时,
ENABLE引脚被拉至3.3V。 - 当NMOS打开时,
ENABLE引脚被拉至低电平,实现信号匹配。
(2) 多个GPIO控制同一信号
当多个GPIO需要同时控制一个输入引脚时,推挽模式可能导致短路。例如:
- GPIO_A输出高电平(3.3V)。
- GPIO_B输出低电平(0V)。
- 结果导致电流短路,损坏器件。
解决方案:
- 使用开漏模式,外部增加上拉电阻。
- 当所有GPIO均为高阻态时,
ENABLE引脚为高电平。 - 只要有一个GPIO输出低电平,则
ENABLE引脚为低电平。
5. 结论
GPIO是嵌入式系统中最常用的控制接口,其输入模式与输出模式均有不同应用场景。
- 推挽模式适用于直接驱动负载,如LED、蜂鸣器。
- 开漏模式适用于不同电压设备互联或多个设备共享信号线,如I²C。
- NMOS适用于低侧开关,PMOS适用于高侧开关。
- GPIO输入模式可用于读取按键、传感器信号等,需注意上拉/下拉配置。
理解GPIO的输入输出特性,有助于合理配置电路,提高嵌入式系统的可靠性和兼容性。
相关文章:
嵌入式硬件: GPIO与二极管基础知识详解
1. 前言 在嵌入式系统和硬件开发中,GPIO(通用输入输出)是至关重要的控制方式,而二极管作为基础电子元件,广泛应用于信号整流、保护电路等。本文将从基础原理出发,深入解析GPIO的输入输出模式,包…...
Android HAL 架构详解,底层开发不再难
目录 HAL 基础概念 HAL 是个啥? 为啥要有 HAL? HAL 在系统中的位置 HAL 工作原理 抽象接口:硬件的 “通用语言” 接口的设计思路 核心结构体 版本与兼容性 实例:相机 HAL 接口 模块加载:动态链接的魔法 加载步骤 优化策略 实例:加载音频 HAL 通信机制:HAL…...
游戏引擎学习第194天
为当天的活动做铺垫 正在进行游戏开发中的调试和视图功能开发。目标是增加一些新功能,使得在开发过程中能够有效地检查游戏行为。今天的重点是推进用户界面(UI)的开发,并且尝试在调试变量的管理上找到一个折中的解决方案。计划探…...
js文字两端对齐
目录 一、问题 二、原因及解决方法 三、总结 一、问题 1.text-align: justify; 不就可以了吗?但是实际测试无效 二、原因及解决方法 1.原因:text-align只对非最后一行文字有效。只有一行文字时,text-align无效,要用text-alig…...
经典论文解读系列:MapReduce 论文精读总结:简化大规模集群上的数据处理
🧠 MapReduce 论文解读总结:简化大规模集群上的数据处理 原文标题:MapReduce: Simplified Data Processing on Large Clusters 作者:Jeffrey Dean & Sanjay Ghemawat 发表时间:2004 年 发表机构:Google…...
HarmonyOS 介绍
HarmonyOS简介 随着万物互联时代的开启,应用的设备底座将从几十亿手机扩展到数百亿IoT设备。全新的全场景设备体验,正深入改变消费者的使用习惯。 同时应用开发者也面临设备底座从手机单设备到全场景多设备的转变,全场景多设备的全新底座&am…...
每天一篇目标检测文献(六)——Part One
今天看的是《Object Detection with Deep Learning: A Review》 目录 一、摘要 1.1 原文 1.2 翻译 二、介绍 2.1 信息区域选择 2.2 特征提取 2.3 分类 三、深度学习的简要回顾 3.1 历史、诞生、衰落和繁荣 3.2 CNN架构和优势 一、摘要 1.1 原文 Due to object dete…...
ESXI 安装及封装第三方驱动和在ESXI系统下安装驱动
ESXI 安装及封装第三方驱动和在ESXI系统下安装驱动 准备工作在线安装 Windows PowerShell离线安装 Windows PowerShell更新在线更新离线更新 下载 ESXi-Customizer-PS-v2.6.0.ps1安装Python安装pip安装相关插件 下载离线捆绑包下载对应的网卡驱动(如果纯净版可以进去…...
【12】Ajax的原理和解析
一、前言 二、什么是Ajax 三、Ajax的基本原理 3.1 发送请求 3.2 解析内容 3.3 渲染网页 3.4 总结 四、Ajax 分析 五、过滤请求-筛选所有Ajax请求 一、前言 当我们在用 requests 抓取页面的时候,得到的结果可能会和在浏览器中看到的不一样&a…...
双塔模型2之如何选择正确的正负样本
双塔模型:正负样本 选对正负样本的作用 > 改进模型的结构 正样本 什么是正样本?答:曝光且有点击的 “用户-物品” 二元组 存在的问题:存在28法则,即少部分物品(比如热门物品)占大部分点击…...
《八大排序算法》
相关概念 排序:使一串记录,按照其中某个或某些关键字的大小,递增或递减的排列起来。稳定性:它描述了在排序过程中,相等元素的相对顺序是否保持不变。假设在待排序的序列中,有两个元素a和b,它们…...
清晰易懂的Rust安装与配置教程
Rust 是一门以安全性和性能著称的系统级编程语言,适合开发操作系统、游戏引擎和高性能服务。本教程将手把手教你安装 Rust 并配置开发环境,从安装到运行第一个程序,全程无坑! 一、安装 Rust(全平台通用) 1…...
零基础使用AI从0到1开发一个微信小程序
零基础使用AI从0到1开发一个微信小程序 准备操作记录 准备 想多尝试一些新的交互方式,但我没有相关的开发经验,html,JavaScript 等都不了解,看了一些使用AI做微信小程序的视频教程,觉得自己也行…...
基于Spring Boot的社区互助平台的设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
【Elasticsearch入门到落地】10、初始化RestClient
接上篇《9、hotel数据结构分析》 上一篇我们讲解了导入的宾馆数据库tb_hotel表结构的具体含义,并分析如何建立其索引库。本篇我们来正式进入链接Elasticsearch的Java代码的编写阶段,先进行RestClient的初始化。 RestClient的初始化分为三步,…...
【AI大模型系列】DeepSeek V3的混合专家模型机制-MoE架构(八)
一、什么是MoE架构 MoE架构的核心思想是将输入数据分配给不同的专家子模型,然后将所有子模型的输出进行合并,以生成最终结果。这种分配可以根据输入数据的特征进行动态调整,确保每个专家处理其最擅长的数据类型或任务方面,从而实…...
HarmonyOS之深入解析如何根据url下载pdf文件并且在本地显示和预览
一、文件下载 ① 网络请求配置 下载在线文件,需要访问网络,因此需要在 config.json 中添加网络权限: {"module": {"requestPermissions": [{"name": "ohos.permission.INTERNET","reason&qu…...
HTML5贪吃蛇游戏开发经验分享
HTML5贪吃蛇游戏开发经验分享 这里写目录标题 HTML5贪吃蛇游戏开发经验分享项目介绍技术栈核心功能实现1. 游戏初始化2. 蛇的移动控制3. 碰撞检测4. 食物生成 开发心得项目收获后续优化方向结语 项目介绍 在这个项目中,我使用HTML5 Canvas和原生JavaScript实现了一…...
AI 的出现是否能替代 IT 从业者?
AI 的出现是否能替代 IT 从业者? AI 的快速发展正在深刻改变各行各业,IT 行业也不例外。然而,AI 并非完全替代 IT 从业者,而是与其形成互补关系。本文将从 AI 的优势、IT 从业者的不可替代性、未来趋势等方面,探讨 AI…...
git 操作记录
1、检查子模块是否在主分支上 [git submodule foreach --recursive \\n [ "$(git rev-parse HEAD)" "$(git rev-parse origin/master)" ] \\n && echo " 一致: $name" || echo "不一致: $name"] 使用 git submodule fore…...
QSettings用法实战(相机配置文件的写入和读取)
很多情况,在做项目开发的时候,将参数独立出来是比较好的方法 例如:相机的曝光次数、曝光时长等参数,独立成ini文件,用户可以在外面修改即可生效,无需在动代码重新编译等工作 QSettings便可以实现该功能 内…...
机器学习——集成学习框架(GBDT、XGBoost、LightGBM、CatBoost)、调参方法
一、集成学习框架 对训练样本较少的结构化数据领域,Boosting算法仍然是常用项 XGBoost、CatBoost和LightGBM都是以决策树为基础的集成学习框架 三个学习框架的发展是:XGBoost是在GBDT的基础上优化而来,CatBoost和LightGBM是在XGBoost的基础上…...
SpringBoot集成Logback终极指南:从控制台到云端的多维日志输出
一、基础配置:快速启用Logback 1. 依赖管理(SpringBoot默认支持Logback) <!-- 无需额外依赖,但需要排除其他日志框架 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>…...
[蓝桥杯 2023 省 A] 网络稳定性
题目来自DOTCPP: 思路: ①由于题目没有告诉我们成树形结构,可能成环。因此,我们要自己构建树。 ②本体我们通过kruskal重构树,按边权从大到小排序,那么查询的两个点的最近公共祖先权值就是答案。 ③在通…...
SSM框架加成SpringBoot项目
🍓博主介绍: 资深程序设计专家,专注于网站开发与文档写作,拥有六年互联网行业经验。精通Java、Python、PHP等主流语言,擅长从需求分析到系统设计的全流程开发。累计开发过数百个网站及应用程序,注重代码质量…...
鸿蒙项目源码-天气预报app-原创!原创!原创!
鸿蒙天气预报项目源码包运行成功含文档ArkTS语言。 我半个月写的原创作品,请尊重原创。 原创作品,盗版必究!!!! 原创作品,盗版必究!!!! 原创作品…...
一文聊聊接入钉钉H5微应用系统实现免登操作技术思路实现验证
一文聊聊接入钉钉H5微应用系统实现免登操作技术思路实现验证 如何创建钉钉应用实现H5端免登录创建钉钉内部应用1.进入钉钉开放平台,配置自己的应用信息2.配置应用相关信息(建议选择旧版,后续有一个token获取,新版会提示URL不安全&…...
测试开发-定制化测试数据生成(Python+jmeter+Faker)
实现步骤 步骤一:使用pythonfaker随机生成测试数据 在python中开发脚本,随机生成所需要的数据。import json from faker import Faker faker Faker(locale"zh_CN")def generate_faker_user():return {"name" : faker.name(),&qu…...
智能体开发平台与大模型关系图谱
架构层级分解(以飞速灵燕智能体平台为例)动态交互流程 3. 关键连接点说明 4. 典型数据流示例...
LinuxTCP/UDP基础概念
TCP(传输控制协议) TCP 是一种面向连接的、可靠的、基于字节流的传输层通信协议。它的主要特点包括: 面向连接:在传输数据之前,需要通过“三次握手”建立连接;传输结束后,通过“四次挥手”断开…...
