深刻理解GPIO(上拉输入、下拉输入、模拟输入、浮空输入,开漏输出,推挽输出的区别,以STM32为例)

article/2025/10/10 18:22:29

目录

  • 前言
  • GPIO是什么
  • GPIO的八大模式
    • 输入模式
      • 浮空输入
      • 上拉输入
      • 下拉输入
      • 模拟输入
    • 输出模式
      • 开漏输出
      • 推挽输出
      • 复用开漏输出
      • 复用推挽输出
  • GPIO的输出速率

前言

学习了这么久的单片机,说来羞愧,直到写这篇文章之前,我都没有仔细去理解GPIO的八种使用模式,之前只是傻傻的用着,直到把模电,数电学完,到今天重新回顾了一遍这一个知识,发现自己终于看懂了之前没有理解透彻的知识,特此总结下来。

GPIO是什么

从最基础的51单片机,Arduino,到STM32,树莓派等等,这些上面都会有GPIO口这么一个概念,如果你点开了我这个博客,说明你大概率开始学习单片机,那么你应该了解的就是这些口可以输出高低电平,或者是读取引脚上的输入电平。
GPIO的总述功能如下

GPIO(general porpose intputoutput):通用输入输出端口的简称。可以通过软件控制其输出和输入。stm32芯片的GPIO引脚与外部设备连接起来,从而实现与外部通信,控制以及数据采集的功能。
———GPIO简介

下面摆一张以STM32内部GPIO口为例的内部原理图,大伙也不要着急,先有一个这个图的概念,下面就是开始讲怎么理解GPIO口。
在这里插入图片描述

先来一点最基础的知识
上拉和下拉:
当我们闭合上拉电阻的开关,断开下拉电阻的开关的时候,也就是此时为上拉通路导通。根据我们最基础的电路知识,如果I/O口断开不接外设,或者接了外设但是电路也断开,此时整条回路是断路的时候,电阻相当于不存在,此时O点的电位,也就被钳制在了VDD(供电电压正极),于是O点就处于高电平。
同理,闭合上拉电阻的开关,断开下拉电阻的开关,那么在电路断开的时候,根据电路知识,电阻相当于不存在,O点的电压就就被钳制在了VSS(GND),也就是O点处于低电平。
数字信号和模拟信号
数字信号:就是根据一些规则,将一个范围内的电压规定为1,一个范围内的电压规定为0,也就是一连串的0,1信号
模拟信号:就是连续的读取到的电压值。
关于图上的TTL施密特触发器和P-MOS和N-MOS,后面讲到对应部分的时候会讲到。

GPIO的八大模式

GPIO可以分为输入或者输出,加起来一共有八种模式。

输入模式

在输入模式下,一共有四种输出模式,分别是

  • 模拟输入
  • 上拉输入
  • 下拉输入
  • 浮空输入

浮空输入

在这里插入图片描述
浮空输入需要走的路径如图所示。首先得知道,浮空输出走的这一条路径,是对一个数字信号的读取。
需要的电路如下:
VDD和VSS所在路径的两个开关同时断开。此时没有上拉和下拉的情况,所以当IO口没有接输入的时候,此时的电平会是一个不确定的值,也就是我们所说的浮空。电平会处于一个跳变的状态,一会高,一会低。只有输入了一个高/低电平才会确定下来。
注意:上拉和下拉电阻电路的开关在实际应用中一般使用MOS管来代替开关来提到。
再往前面走,就是走到了TTL施密特触发器这一个部分。我们知道,由于电源的特性,或者是由于外部开关输入的特性,输入的数字信号,极有可能会出现脉冲等噪声的影响,为了让我们的波形更好看,或者信号更加清晰,所以就设置了TTL施密特触发器这个东西。经过之后,我们就会把这个数字信息存储在输入数据寄存器中。
这样我们就读到了IO过来的数字信号

优势:这一种输入模式的电平会完全取决于外部电路而与内部电路无关。有时候会用作对开关按键的读取。

但是在没有外部电路接入的时候,IO脚浮空会使得电平不确定

上拉输入

在这里插入图片描述
上拉输入需要走的路径如图所示。首先得知道,上拉输出走的这一条路径,是对一个数字信号的读取。
需要的电路如下:
VDD所在上拉电阻开关闭合,下拉电阻的开关断开。
根据前面浮空输入里面所提的,在没有信号输入的时候,根据电路知识,此时的电平就是VDD的电平,此时读取到的电平就是高电平。如果输入了一个高电平,VDD和O点(最上面的图中的O点)之间就几乎没有电势差,此时O点的电平就仍然是高电平,读取到的电平就是高电平。但是由于在没有电压输入的时候,电平也是高电平,所以这一种输入情况下是没有办法确定信号是否输入了。
当输入信号是一个低电平的时候,此时O点的电平的电平就会变成低电平,那么VDD和O点之间形成了电势差,但是因为上拉电阻的存在,所以不会出现一个大电流。此时单片机读取到的一个电平就是一个低电平。在上拉输入的情况下,低电平的是能够非常明显的读取到的。
上拉输入的好处就是输入的电平不会上下浮动而导致输入信号不稳定,在没有信号输入的情况下可以稳定在高电平。

下拉输入

在这里插入图片描述
下拉输入需要走的路径如图所示。首先得知道,下拉输出走的这一条路径,是对一个数字信号的读取。
需要的电路如下:
VDD所在上拉电阻开关断开,下拉电阻的开关闭合。
根据前面浮空输入里面所提的,在没有信号输入的时候,根据电路知识,电平就是VSS的电平,此时读取到的电平就是低电平。此时输入的电平如果是一个低电平,就没有办法和之前的情况进行区分。但如果输入的是一个高电平,O点和VSS之间同样形成了电势差,O点的电平会变成外部的高电平,那么单片机得到的就是一个高电平信号。
下拉输入的好处就是输入的电平不会上下浮动而导致输入信号不稳定,在没有信号输入的情况下可以稳定在低电平。

模拟输入

在这里插入图片描述
模拟输入需要走的路径如图所示。首先得知道,模拟输出走的这一条路径,是我们需要对一个模拟信号进行读取。
在我们使用单片机的时候,我们有时候需要用AD采集到IO口上面的真实电压。这就有了我们所需要的模拟输入。为了让外部的电压真实的读取到单片机的AD模块,我们既不能闭合上拉和下拉的开关,也不能让信号经过施密特触发器。

优势:可以让AD读取电压。还可以在低功耗模式下运行,实现省电的作用。

输出模式

在输出模式下,同样也有四种输出模式,分别是

  • 开漏输出
  • 推挽输出
  • 复用开漏输出
  • 复用推挽输出

开漏输出

在这里插入图片描述
④⑤⑥⑦是读取的过程,此处不管。
开漏输出的电路路径是①②③④,②前面的步骤就是一个对输出信号的控制,不是重点,开漏输出里面最重要的是③,也就是N-MOS这一部分,下面来补充一下模电知识。
在这里插入图片描述
我们可以把这一个MOS管当成一个三极管,对于图中所示的这种三极管我们可以简单的理解成一个水龙头,左侧就是一个水龙头开关,当给一个高电平的时候, O点和GND就会导通。(O点的输出就是一种反向器的输出,也就是O点的电平会和左侧MOS的栅极(三极管的基极)相反)
所以说,开漏输出就很好理解了。当我们给一个低电平的时候,MOS管关闭,此时输出的电压就是一个浮空,即不确定的电压。如果给一个高电平,那么MOS管导通,相当于IO口与VSS相连,此处就输出了一个低电平电压。
优势①
虽然我们可以看到开漏输出是没有办法在内部输出一个高电平,但是这一个看似是缺点。其实实际上是一种优点。我们可以得到,当给一个低电平的时候,MOS管没有导通,此时电压不确定导致无法输出高电平,但是一旦我们在外部增加一个上拉,那么这一个缺点就会被有效避免。并且,因为是我们自己设计一个上拉,这个上拉的电压是由我们自己确定,这样我们就可以根据外部电路需要多少V的高电平来给这一个上拉的电压,可以更好的适应更多情况。如下图,我们可以给定任意的VDD电压,来适应我们实际所需要的情况。
在这里插入图片描述
优势②
开漏输出的实质其实就是一个OD门(OD:漏极输出(Open Drain))。而在数电中,OD门有一个非常重要的特性就是可以实现线与的功能,简单来说,就是在像IIC这样的总线协议中,只要有一个给低电平,那么总线都会被拉低。

推挽输出

在这里插入图片描述
推挽输出就是可以需要利用两个不同的MOS管来实现输出。
P-MOS和N-MOS是不同的控制方式,当给一个高电平的时候,N-MOS导通,P-MOS不导通 订正:N-MOS不导通,P-MOS导通,此时IO口接通在VSS VDD,此时输出的是高 电平。当给一个低电平的时候,P-MOS导通,N-MOS导通 N-MOS导通,P-MOS不导通,此时IO口接通在VDDVSS 电源上面,此时输出的是低电平。
一定要把这个MOS管理解成开关控制的水龙头!!!
优势
带载能力强。

复用开漏输出

复用推挽和复用开漏其实很简单,在你理解了开漏和推挽的原理之后,如果你不想用单片机内部来输出,那么你可以进行复用,将输出转移到其他外设上面
在这里插入图片描述

复用推挽输出

在这里插入图片描述

GPIO的输出速率

在这里插入图片描述
GPIO还有一个十分重要的概念,也就是响应速度,相应速度是指,当你的电平需要改变的时候,这个改变的时间需要多少。如果你对这个时间要求十分严格,那么一定要使用高输出速率的IO口。反之则反。


http://chatgpt.dhexx.cn/article/2qFek6aa.shtml

相关文章

从硬件分析推挽输出和开漏输出详细区别

推挽输出:可以输出高,低电平,连接数字器件。 输出 0 时,N-MOS 导通,P-MOS 高阻,输出0。 输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路)。 开漏输出:输出端相当于三…

推挽电路

作者:阏男秀 链接:https://www.zhihu.com/question/28512432/answer/41217074 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 我觉得下面这个「网上资料」还是很不错的。 单片机I/O口推挽输…

推挽电路 MOS管、推挽输出和开漏输出

【专题5:硬件设计】 之 【48.推挽电路驱动MOS管】_嵌入式工程师成长之路的博客-CSDN博客_推挽驱动 【专题2:电子工程师 之 硬件】 之 【44.MOS管的功能特点】 【专题2:电子工程师 之 硬件】 之 【45.AON6244 MOS管数据手册分析】 【专题2&…

关于推挽输出和开漏输出的理解

原文链接: 【1】 如何正确理解开漏输出和推挽输出 (写的很棒,真的是很通俗易懂了~) 【2】 什么是开漏电路(推挽电路)?开漏形式的电路由何特点? 【3】 开漏、开集电路详解 下面是看…

开漏输出、推挽输出

摘自:http://www.cnblogs.com/ne-zha/p/7422302.html 1、开漏输出 开漏输出只能输出低电平,类似于三极管的集电极,要输出高电平需要上拉电阻才能输出 我们先来说说集电极开路输出的结构。集电极开路输出的结构如图1所示,右边的…

常用的推挽输出、开漏输出、上拉输入

转载  https://blog.csdn.net/hailin0716/article/details/24333951  一、推挽输出: 可以输出高,低电平,连接数字器件; 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC…

单片机IO口科普:推挽输出、开漏输出详解

关注、星标公众号,直达精彩内容 来源:网路素材 推挽输出:可以输出高,低电平,连接数字器件; 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 推挽结构一般是指两个…

推挽输出

推挽输出是用两个晶体管或者场效应管构成的推挽电路(在模拟电路中应用很广泛如功放驱动电机驱动等等),这个电路的特点就是输出电阻小, 所以能够驱动大的负载,从而能够使得单片机管脚直接驱动发光二极管、蜂鸣器、甚至更…

Windows7安装教程

Windows7安装教程 硬盘分区教程:http://www.laomaotao.org/jiaocheng/92/cpfq.html 以下安装教程仅供参考 一、桌面安装 二、U盘安装 三、安装驱动 四、激活 用到的硬件: 电脑 U盘 用到的软件: Windows7旗舰版安装包 老毛桃U盘制作…

怎么安装w7计算机系统安装,图解如何安装win7系统

最近,小编发现很多小伙伴都想要知道u盘安装win7系统的方法呢,其实u盘安装win7的方法非常简单,大家如果想学习的话,那小编我肯定是会教你们的,所以废话不多说,现在我就来给你们演示一下怎样装系统win7系统的…

U盘安装win7系统 “详细” 教程

准备工具: 一个装有系统(iso镜像)的老毛桃U盘、一台电脑、一个人; 一、将U盘插入电脑 —— 开机过程中 “拼命” 狂按F2直到进入BIOS ,如下图: 二、选择右边第二个 “启动菜单” —— 选择你的U盘&#…

win7装xp(win7装xp双系统教程)

xp可以装win7?xp可以装win7吗 这是两个系统并且互相不冲突,win7是XP的升级,功能更强大,只要你的电脑配置够了就可以装,内存最低4G! Win7和XP的装法不一样吗? 一样,差不太多&#xff…

window7系统怎么给电脑安装

系统安装步骤: 1、用制作u启动盘,重启电脑等待出现开机画面按下启动快捷键,选择u盘启动进入到u深度主菜单,选取“win8Pe装机维护版(新机器)”选项 2、进入win8Pe系统,将会自行弹出安装工具&am…

怎么给电脑安装window7系统呢

系统安装步骤: 1、用制作u启动盘,重启电脑等待出现开机画面按下启动快捷键,选择u盘启动进入到u深度主菜单,选取“win8Pe装机维护版(新机器)”选项 2、进入win8Pe系统,将会自行弹出安装工具&am…

下载并安装Windows 7 系统的步骤

一、打开百度搜索 ‘系统之家官方’ 找到官方地址后打开 二、找到自己需要安装的系统镜像进行下载 (目前我需要的是Win 7镜像) 三、将下载完毕的镜像文件解压到非系统盘(即非U盘)外的其他盘根目录下(例如:D盘) 四…

Win7系统安装教程

安装准备工作 ● 提前下载好win7光盘映像文件 ● 解压工具 ● 做好重要文件的备份(数据无价) ● 提前准备好网卡驱动 安装步骤 1、使用解压工具把win7原版镜像文件解压到C盘之外的分区,比如D盘。然后打开文件夹点击setup.exe (或用pe制作…

客户端Git安装教程

首先打开Git官网https://git-scm.com/ 然后选择合适的版本去下载,我的电脑是64位的,查看自己电脑是什么操作系统,右击【我的电脑】—>属性 就看到了 接下来就是双击下载好的安装包,同意条款,选择安装路径 然后就是…

GIT安装教程(入门)

目录 前言 Git作者 官网 GIT优点 GIT缺点 为什么要使用 Git 下载以及安装步骤 一、官网下载 二、GIT安装步骤 1、安装get程序 2、许可声明 3、选择安装路径 4、选择git组件 5、创建菜单名称 6、 git文件默认编辑器 7、设置新存储库中初始分支的名称 8、调整Pa…

Git安装教程超详细(Windows系统)

刚换工作环境,新环境配置需要安装Git,记录一下,希望对大家有所帮助。 一.官网下载git包 https://git-scm.com/ 我的是Windows系统,网站默认为Windows,其他系统可以自己选择,下载好之后,双击文…

Git安装详细教程

Git安装: 1.首先从https://git-scm.com/downloads上下载git for windows 2.下载完成之后放到一个指定的盘中,我放到D盘,其他盘也可以 3.安装Git一直点击next即可,非常简单,也不用害怕装错 4.当安装完成之后可以在桌面上…