0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

GPIO内部结构及输入输出模式

Q4MP_gh_c472c21 来源:嵌入式悦翔园 作者:JamesBin 2022-10-08 14:37 次阅读

GPIO全称General Purpose Input Output,即通用输入/输出。其实GPIO的本质就是芯片的一个引脚,通常在ARM中所有的I/O都是通用的。不过,由于每个开发板上都会设计不同的外围电路,这就造成了GPIO的功能可能有所不同。大部分GPIO都是有复用功能的,比如有些GPIO可能是串口的TX或RX,也可能是I2C的SCL或SDA线。

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

一、GPIO内部结构

b9b989ac-46c1-11ed-96c9-dac502259ad0.png

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

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

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

GPIOx_CRL(x=A..E)端口配置低寄存器32位寄存器
GPIOx_CRH(x=A..E)端口配置高寄存器32位寄存器
GPIOx_IDR(x=A..E)端口输入数据寄存器32位寄存器但仅用低16位
GPIOx_ODR(x=A..E)端口输出数据寄存器32位寄存器但仅用低16位
GPIOx_BRR(x=A..E)端口位清除寄存器16位寄存器
GPIOx_BSRR(x=A..E)端口位设置/清除寄存器16位寄存器
GPIOx_LCKR(x=A..E)端口配置锁定寄存器32位寄存器

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

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等总线设备上。

b9cf7ea6-46c1-11ed-96c9-dac502259ad0.png

2、上拉输入模式

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

ba2616a8-46c1-11ed-96c9-dac502259ad0.png

3、下拉输入模式

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

ba7cd09c-46c1-11ed-96c9-dac502259ad0.png

4、模拟输入模式

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

bad0b72a-46c1-11ed-96c9-dac502259ad0.png

5、开漏输出模式

见上面二中的详细介绍。

6、开漏复用输出模式

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

7、推挽输出模式

见上面二中的详细介绍。

8、推挽复用输出模式

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

bae7b4de-46c1-11ed-96c9-dac502259ad0.png

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

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

bb598258-46c1-11ed-96c9-dac502259ad0.png

四、STM32中GPIO的配置

在固件库开发中,操作寄存器 CRH 和 CRL 来配置 IO 口的模式和速度是通过 GPIO 初始化函数完成:

voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);
/*第一个参数是用来指定 GPIO,取值范围为 GPIOA~GPIOG。
*第二个参数为初始化参数结构体指针,结构体类型为GPIO_InitTypeDef
*/

初始化 GPIO 的常用格式是:

GPIO_InitTypeDefGPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//LED0--PB.5端口配置

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速度50MHz

GPIO_Init(GPIOB,GPIO_InitStructure);//根据设定参数配置GPIO

IO 口速度设置有三个可选值:

typedefenum

{

GPIO_Speed_10MHz,

GPIO_Speed_2MHz,

GPIO_Speed_50MHz

}GPIOSpeed_TypeDef;

模式则有8个可选定义如下:

typedefenum

{GPIO_Mode_AIN=0x0,//模拟输入

GPIO_Mode_IN_FLOATING=0x04,//浮空输入

GPIO_Mode_IPD=0x28,//下拉输入

GPIO_Mode_IPU=0x48,//上拉输入

GPIO_Mode_Out_OD=0x14,//开漏输出

GPIO_Mode_Out_PP=0x10,//通用推挽输出

GPIO_Mode_AF_OD=0x1C,//复用开漏输出

GPIO_Mode_AF_PP=0x18//复用推挽

}GPIOMode_TypeDef;

五、总结

今天主要介绍了GPIO的定义,以及GPIO不同模式之间的区别与实现方式。相信看完本文,你会对GPIO有一个更深的理解。

如果是做软件的小伙伴,可以不用太关注于GPIO是如何实现的,但是需要知道每个模式下GPIO的特点和应用场合。只有这样,我们在实际应用中才能更好的配置出最合适的那个。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5390

    浏览量

    121891
  • STM32
    +关注

    关注

    2276

    文章

    10947

    浏览量

    359153
  • GPIO
    +关注

    关注

    16

    文章

    1223

    浏览量

    52743

原文标题:一文弄懂GPIO不同模式之间的区别与实现原理

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SN65DPHY440SS 4组数据输入输出内部结构是否一样?

    SN65DPHY440SS 4组数据输入输出内部结构是否一样?差分对P和N能否交换位置? 差分对顺序能否能够调整?如图
    发表于 12-13 06:00

    Pbuf是什么?Pbuf的内部结构是怎样的

    Pbuf是什么?Pbuf的内部结构是怎样的?UDP处理的输入输出的流程是怎样的?
    发表于 11-03 07:37

    GPIO内部结构通常是什么样

    ”经常弄不清什么是开漏什么是推挽、IO输入输出电路原理。本文的目地是让大家清楚GPIO的几种配置,GPIO内部结构通常是什么样,上拉、下拉电阻的作用,拉电流、灌电流是什么有助于遇到问题
    发表于 01-25 06:25

    6.2 通用输入输出GPIO(神舟王207)

    此文档是关于神舟王开发板之输入输出GPIO的介绍和讲解;
    发表于 05-25 10:01 2次下载

    使用GPIO输入输出各种模式的详细资料讲解

    能将处理器的GPIO(General Purpose Input and Output)内部结构和各种模式彻底弄清楚的人并不多,最近在百度上搜索了大量关于这部分的资料,对于其中很多问题的说法并不统一
    发表于 08-19 17:31 1次下载
    使用<b class='flag-5'>GPIO</b><b class='flag-5'>输入输出</b>各种<b class='flag-5'>模式</b>的详细资料讲解

    MCU通用输入输出端口(GPIO)输出模式

    对于常规MCU,通用输入输出GPIO)是其最基本、最常用的功能,用于实现最基本的数字量输入输出。 信号一般为:以3.3VDC为高电平的LTTL电平以5.0VDC为高电平的TTL电
    发表于 10-28 19:06 16次下载
    MCU通用<b class='flag-5'>输入输出</b>端口(<b class='flag-5'>GPIO</b>)<b class='flag-5'>输出</b><b class='flag-5'>模式</b>

    二.GPIO输入输出及延迟函数

    一. GPIO八种模式,四种输入,四种输出1.GPIO输入初始化void
    发表于 11-24 20:06 1次下载
    二.<b class='flag-5'>GPIO</b><b class='flag-5'>输入输出</b>及延迟函数

    04、STM8通用输入输出口(GPIO)

    04、STM8通用输入输出口(GPIO)文章目录04、STM8通用输入输出口(GPIO)1、概述2、GPIO主要功能3、I/O 的配置和使用
    发表于 11-26 15:21 9次下载
    04、STM8通用<b class='flag-5'>输入输出</b>口(<b class='flag-5'>GPIO</b>)

    STM32的8种GPIO输入输出模式

    STM32的8种GPIO输入输出模式参考文章“STM32的8种GPIO输入输出模式深入详解”和“
    发表于 11-26 17:06 16次下载
    STM32的8种<b class='flag-5'>GPIO</b><b class='flag-5'>输入输出</b><b class='flag-5'>模式</b>

    (转)STM32的八种输入输出模式详解

    输出(GPIO_Mode_Out_OD)-开漏复用功能(GPIO_Mode_AF_OD)-推挽式输出(GPIO_Mode_Out_PP)-推
    发表于 11-30 21:06 17次下载
    (转)STM32的八种<b class='flag-5'>输入输出</b><b class='flag-5'>模式</b>详解

    GPIO通用输入输出

    GPIO通用输入输出一、GPIO的功能概述用途:GPIO是通用输入输出(General Purpose I/O)的简称,主要用于工业现场需要
    发表于 12-20 18:58 6次下载
    <b class='flag-5'>GPIO</b>通用<b class='flag-5'>输入输出</b>

    GPIO内部结构和工作模式

    1 简介​ GPIO:通用输入输出端口​ (1) 输出功能:控制引脚输出高、低电平,实现开关控制​ GPIO引脚接入LED,控
    发表于 01-13 16:02 4次下载
    <b class='flag-5'>GPIO</b><b class='flag-5'>内部结构</b>和工作<b class='flag-5'>模式</b>

    STM32的GPIO输入输出的几种模式的总结

    GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入(5)GPIO_Mode_Out_OD开漏
    发表于 01-13 16:10 2次下载
    STM32的<b class='flag-5'>GPIO</b><b class='flag-5'>输入输出</b>的几种<b class='flag-5'>模式</b>的总结

    通用输入输出GPIO是什么

    GPIO代表通用输入/输出。它是集成电路上的一种引脚,没有特定功能。虽然大多数引脚都有专用用途,例如向特定组件发送信号,但 GPIO 引脚的功能是可定制的,并且可以由软件控制。 引脚
    发表于 03-23 14:04 1546次阅读
    通用<b class='flag-5'>输入输出</b><b class='flag-5'>GPIO</b>是什么

    GPIO内部电路的原理

    原理 前言 GPIO内部结构概览 GPIO内部结构详解 保护电路 输出电路 推挽输出 开漏
    的头像 发表于 11-20 09:24 571次阅读
    <b class='flag-5'>GPIO</b><b class='flag-5'>内部</b>电路的原理