打印
[疑难问答]

GPIO内部电路及几种常用模式

[复制链接]
1996|41
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yeates333|  楼主 | 2024-7-29 12:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
GPIO全称General Purpose Input Output ,即通用输入/输出。其实GPIO的本质就是芯片的一个引脚。由于每个开发板上都会设计不同的外围电路,这就造成了GPIO的功能可能有所不同。大部分GPIO都是有复用功能的,比如有些GPIO可能是串口的TX或RX,也可能是I2C的SCL或SDA线。

所以,我们不仅要知道GPIO能够输出高低电平,还要理解为什么有些GPIO可以复用某些功能,而其他的不可以。

一、GPIO内部结构

我们在使用GPIO的时候,可能不会去想为什么通过写代码或者操作寄存器就可以控制一个引脚的高低电平。

今天就让我们一起来看看,为什么通过操作寄存器(其实写代码的过程就是在操作寄存器)就能控制引脚输入或者输出。

我们想要想控制一个GPIO口的需要操作7个寄存器,分别是CRL,CRH,IDR,ODR,BRR,BSRR,LCKR 我们对GPIO的操作本质上就是在对这些寄存器进行读写操作,以下是这些寄存器的名称:


首先,我们分析一下上面的结构电路。

1、保护二极管

保护二极管从它的名字就不难想到他是用来对系统进行保护的,通过两个二极管的导通可以防止引脚外部输入电压过低或过高。当电压过高时,上方的保护二极管导通。当电压过低时,下方的二极管导通,防止不正常电压导入到芯片内部造成芯片烧毁。


2、P·MOS管和N·MOS管

GPIO经过两个二极管的保护后向上流入输入模式,向下流入输出模式,而输出模式的控制是由一个由P·MOS管和N·MOS管组成的单元电路,该电路主要是控制输出的模式,由该结构狗策划给你的单元电路具有推挽输出和开漏输出两种模式。

当系统配置为推挽输出模式时:

若向该结构中输入高电平,经过反向后,上方的P-MOS导通,下方的N-MOS关闭,对外输出高电平;

若向该结构中输入低电平时,经过反向后,下方的N-MOS管导通,上方的P-MOS关闭,对外输出低电平。

当引脚高低电平切换时,两个MOS管轮流导通,P管负责灌电流,N管负责拉电流,使其负载能力和开关速度都比普通的方式有很大的提高。**推挽输出的低电平为0V,高电平为3.3V**。


当系统配置为开漏输出模式时:

上方的P-MOS管完全不工作;

如果我们控制输出为0,低电平,则P-MOS管关闭,N-MOS管导通,使输出接地;

若控制输出为1(它无法直接输出高电平)时,则P-MOS管和N-MOS管都关闭,所以开漏输出模式下引脚既不输出高电平,也不输出低电平,为高阻态。

推挽输出模式一般应用在输出电平为0和3.3V而且需要高速切换开关状态的场合。开漏输出模式一般应用在I2C、SMBUS通信等需要 线与功能的总线电路中。

在单片机中除了必须用开漏模式的场合,一般习惯使用推挽输出模式。


3、输出数据寄存器

前面我们知道双了MOS管结构电路的输入信号,是由GPIO输出数据寄存器GPIOx_ODR提供的,因此我们可以通过修改输出数据寄存器的值,就可以修改GPIO引脚的输出电平。而置位/复位寄存器GPIOx_BSRR可以通过修改输出数据寄存器的值,从而影响电路的输出。


4、复用功能输出

复用功能输出中的复用是指STM32的其他片上外设对GPIO引脚进行控制,此时GPIO引脚用作该外设功能的一部分,算是第二用途。从其他外设引出来的复用功能输出信号与GPIO本身的数据寄存器都连接到双MOS管结构的输入中。


二、输入输出模式

GPIO共有8中输入输出模式,分别是:上拉输入、下拉输入、浮空输入、模拟输入、开漏输出、推挽输出、开漏复用输出、推挽复用输出 ,下面我们详细介绍以下上面的八种输入输出模式。

  • 上拉输入:GPIO_Mode_IPU

  • 下拉输入:GPIO_Mode_IPD

  • 浮空输入:GPIO_Mode_IN_FLOATING

  • 模拟输入:GPIO_Mode_AIN

  • 开漏输出:GPIO_Mode_Out_OD

  • 推挽输出:GPIO_Mode_Out_PP

  • 开漏复用:GPIO_Mode_AF_OD

  • 推完复用:GPIO_Mode_AF_PP



下面,详细讲一下几个常用的模式。

1、浮空输入

浮空输入模式下,I/O端口的电平信号直接进入输入数据寄存器。也就是说,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的,通常用于IIC、USART等总线设备上。


2、上拉输入模式

上拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平保持在高电平(并且在I/O端口输入为低电平的时候,输入端的电平也是低电平)。


3、下拉输入模式

下拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空(在无信号输入)的情况下,输入端的电平保持在低电平;并且在I/O端口输入为高电平的时候,输入端的电平也是高电平。


4、模拟输入模式

模拟输入模式下,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,比如ADC模块等。


5、开漏输出模式

见上面二中的详细介绍。


6、开漏复用输出模式

开漏复用输出模式,与开漏输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,取而代之利用片上外设模块的复用功能输出来决定的,一般用于片内外设功能:TX1,MOSI,MISO,SCK,SS。


7、推挽输出模式

见上面二中的详细介绍。


8、推挽复用输出模式

推挽复用输出模式,与推挽输出模式很是类似。只是输出的高低电平的来源,不是让CPU直接写输出数据寄存器,而是利用片上外设模块的复用功能输出来决定的,常见采用推挽输出模式的一般为片内外设功能IIC的SCL、SDL。


三、开漏输出和推挽输出的区别

开漏输出和推挽输出模式的区别主要是开漏输出只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极,适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内);推挽输出可以输出强高、低电平,连接数字器件。


使用特权

评论回复
沙发
alvpeg| | 2024-8-4 09:36 | 只看该作者
51单片机的GPIO端口分为P0、P1、P2和P3四个端口,每个端口有8个引脚,总共32个引脚。其中P3端口具有特殊功能,可以配置成第二功能引脚。

使用特权

评论回复
板凳
albertaabbot| | 2024-8-4 15:53 | 只看该作者
常用模式:
输入模式(Input Mode):
浮空输入:引脚没有内部上拉或下拉电阻,适用于外部信号源能够提供足够的驱动能力。
带上拉输入:引脚内部连接上拉电阻,当外部信号为低电平时,引脚被拉低;当外部信号为高阻态或浮空时,引脚被上拉至高电平。
带下拉输入:引脚内部连接下拉电阻,当外部信号为高电平时,引脚被拉高;当外部信号为低阻态或浮空时,引脚被下拉至低电平。
输出模式(Output Mode):
推挽输出:引脚可以提供足够的电流以驱动外部负载,同时能够输出高电平和低电平。
开漏输出:引脚只能输出低电平,输出高电平时处于高阻态。适用于需要线与(wire-OR)功能的场合,或者当需要外部上拉电阻时。
特殊功能模式:
模拟功能:某些引脚可以配置为模拟输入,用于ADC(模数转换器)等模拟功能。
第二功能:部分引脚除了可以作为标准的GPIO使用外,还可以配置为具有第二功能,如定时器、串行通信接口等。

使用特权

评论回复
地板
chenqianqian| | 2024-8-5 08:53 | 只看该作者
GPIO内部就是一个互补输出结构

使用特权

评论回复
5
averyleigh| | 2024-8-5 18:16 | 只看该作者
不同型号的51单片机可能支持的GPIO模式有所不同,具体模式及其配置方法应参考该型号单片机的数据手册或相关文档。

使用特权

评论回复
6
phoenixwhite| | 2024-8-5 18:49 | 只看该作者
输入模式:此时,引脚内部的上拉电阻被启用,引脚处于高阻态。外部信号可以通过输入缓冲器被读入。
输出模式:此时,引脚可以输出高电平或低电平。输出高电平时,内部的上拉电阻会将引脚拉高;输出低电平时,内部的下拉电阻会将引脚拉低。

使用特权

评论回复
7
bartonalfred| | 2024-8-6 12:09 | 只看该作者
51单片机的GPIO(General Purpose Input/Output)引脚是微控制器与外部世界交互的主要手段。这些引脚可以被配置为输入或输出模式,以适应不同的应用需求。

使用特权

评论回复
8
robertesth| | 2024-8-6 13:43 | 只看该作者
推挽输出模式则能够真正输出高电平和低电平,在两种电平下都具有驱动能力。在此模式下,输入高电平时P-MOS管导通而N-MOS管关闭,输出高电平;反之,输入低电平时N-MOS管导通而P-MOS管关闭,输出低电平。这种模式适用于需要大电流驱动的场合。

使用特权

评论回复
9
biechedan| | 2024-8-8 11:45 | 只看该作者
不同型号的 51 单片机可能在 GPIO 的具体特性和功能上略有差异,具体使用时可参考相应的数据手册。

使用特权

评论回复
10
phoenixwhite| | 2024-8-8 12:42 | 只看该作者
P1、P2端口
这两个端口在上电复位后默认为准双向口(Quasi-Bidirectional)模式,内部带有弱上拉电阻。
当配置为输出时,这些端口可以直接驱动负载,不需要外部上拉电阻。

使用特权

评论回复
11
janewood| | 2024-8-10 17:56 | 只看该作者
对于其他模式,如浮空输入、上拉输入、下拉输入、模拟输入和开漏输出模式,51单片机的GPIO并不直接支持这些模式,但可以通过外部电路或编程技巧来实现类似的功能。

使用特权

评论回复
12
youtome| | 2024-8-10 21:50 | 只看该作者
弱上拉模式,即可输入也可输出。灌电流可达20mA,拉电流为270~150uA。在这种模式下,当引脚悬空(无信号输入)时,输入端的电平保持在高电平;但如果外部输入为低电平,引脚也会变为低电平。常用于一般的数据传输和控制。

使用特权

评论回复
13
wilhelmina2| | 2024-8-12 13:18 | 只看该作者
推挽输出(Output Push-Pull):
特点:既可以输出高电平,也可以输出低电平。推挽结构由两个互补控制的三极管组成,导通损耗小、效率高。
应用:连接数字器件,如LED、继电器等,以控制其开关状态。

使用特权

评论回复
14
bartonalfred| | 2024-8-12 20:31 | 只看该作者
51单片机 GPIO 内部电路通常包含一些基本组件,如输入缓冲器、锁存器、场效应管驱动电路等。以其中一个端口(如 P0 口)为例,其内部结构大致由锁存器、输入缓冲器、多路开关、一个非门、一个与非门及场效应管驱动电路构成。

使用特权

评论回复
15
cemaj| | 2024-8-12 20:44 | 只看该作者
输入缓冲器:用于接收外部信号并将其传递给内部电路。
输出驱动器:用于将内部信号传递到外部电路。
锁存器:用于存储输出驱动器的状态。
切换开关:在某些端口(如P0口)中,切换开关用于选择端口是作为普通I/O使用还是作为地址/数据复用线使用。

使用特权

评论回复
16
maqianqu| | 2024-8-12 20:56 | 只看该作者
51单片机的GPIO配置主要是通过软件来控制的,通常涉及到设置相关的寄存器值来控制GPIO的工作模式。

使用特权

评论回复
17
yorkbarney| | 2024-8-12 21:09 | 只看该作者
51单片机的GPIO(通用输入/输出端口)是芯片与外部世界沟通的桥梁,它允许芯片接收外部信号并控制外部设备。了解GPIO的内部电路和常用模式对于高效使用51单片机至关重要。

使用特权

评论回复
18
biechedan| | 2024-8-12 21:22 | 只看该作者
设置数据方向寄存器(如P0、P1、P2、P3的DDR或TRIS寄存器):确定引脚是输入还是输出。
设置端口寄存器(如P0、P1、P2、P3):对于输出模式,写入端口寄存器可以设置输出电平;对于输入模式,读取端口寄存器可以获取引脚状态。
特殊功能寄存器(如PCON、P1M1、P1M0等):对于具有特殊功能的引脚,可能需要配置这些寄存器来启用相应的功能。

使用特权

评论回复
19
robincotton| | 2024-8-13 04:30 | 只看该作者
51单片机的GPIO内部电路设计灵活,通过不同模式的选择,可以满足各种应用场景的需求。在使用GPIO时,需要根据具体应用来选择合适的工作模式,以确保系统的稳定性和性能。

使用特权

评论回复
20
xiaoyaodz| | 2024-8-13 04:45 | 只看该作者
在实际应用中,需根据具体需求合理配置 GPIO 的工作模式,以实现与外部设备的正确通信和控制。
深入搜索

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

1192

帖子

1

粉丝