首页>>科技 >>内容

gpio是什么的缩写,GPIO是什么

发布时间:2023-11-02 09:52:12编辑:温柔的背包来源:

很多朋友对gpio是什么的缩写,GPIO是什么不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

gpio是什么的缩写,GPIO是什么

一、 前言GPIO的全称是General Purpose Input Output,意思是通用输入/输出。其实GPIO的本质就是芯片的一个引脚。通常ARM中的所有I/O都是通用的。但由于每个开发板上设计的外围电路不同,GPIO 的功能可能会有所不同。大多数GPIO都具有复用功能。例如,有些GPIO可能是串口的TX或RX,也可能是I2C的SCL或SDA线。

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

二、GPIO内部结构当我们使用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 位寄存器,但仅输出数据寄存器32 位寄存器,具有低16 位GPIOx_ODR(x=A.E) 端口,但清除寄存器16 位寄存器GPIOx_BSRR(x=A.E),仅具有低16 位GPIOx_BRR(x=A.E) 端口位) 端口位设置/清除寄存器16 位寄存器GPIOx_LCKR (x=A.E) 端口配置锁定寄存器32 位寄存器我们首先分析一下上面的结构电路:

1、 保护二极管:从名字上不难想象,保护二极管是用来保护系统的。两个二极管的导通可以防止引脚外部输入电压过低或过高。当电压过高时,上部保护二极管导通。当电压过低时,下二极管导通,防止异常电压引入芯片,导致芯片烧毁。

2、PMOS管和NMOS管:GPIO经过两个二极管保护后,向上流动为输入模式,向下流动为输出模式。输出模式由PMOS管和NMOS管控制。它由单元电路组成,主要控制输出模式。该结构狗设计的单元电路有两种模式:推挽输出和开漏输出。

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

如果向该结构输入高电平,方向相反后,上部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 下面是一些常用的模式:

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

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

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

3.4 模拟输入模式在模拟输入模式下,I/O 端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片内外围模块,如ADC 模块。

3.5 开漏输出模式参见上面第2部分的详细介绍;

3.6 开漏复用输出模式开漏复用输出模式与开漏输出模式非常相似。它只是输出高电平和低电平的来源。不是让CPU直接写入输出数据寄存器,而是由片内外围模块的复用功能输出来决定。一般用于片内及片内外设功能:TX1、MOSI、MISO、SCK、SS

3.7 推挽输出方式参见上文第2部分详细介绍;

3.8 推挽复用输出模式推挽复用输出模式与推挽输出模式非常相似。只是输出高低电平的来源不是由CPU直接写入输出数据寄存器来决定的,而是利用片内外围模块的复用功能输出来决定的。常见的推挽输出方式一般是片内外设功能IIC的SCL。SDL。

四、 开漏输出和推挽输出的区别开漏输出和推挽输出方式的主要区别是开漏输出只能输出强低电平,高电平必须是由外部电阻拉高。输出端相当于三极管的集电极,适合电流型驱动。其吸收电流能力较强(一般在20ma以内);推挽输出可输出强高低电平,连接数字设备。

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

无效GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct); /*第一个参数用于指定GPIO,取值范围为GPIOA~GPIOG。 *第二个参数为初始化参数结构体指针,结构体类型为GPIO_InitTypeDef */初始化GPIO常用格式为:

GPIO_InitTypeDef GPIO_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; //Speed 50MHzGPIO_Init(GPI OB, GPIO_InitStructure);//根据设置固定参数的GPIOIO口速度设置有3个可选值:

typedef 枚举{GPIO_Speed_10MHz,GPIO_Speed_2MHz,GPIO_Speed_50MHz}GPIOSpeed_TypeDef; mode 有8 个可选定义,如下:

typedef enum{ 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在每种模式下的特点和应用场景。只有这样,我们才能在实际应用中更好地配置出最合适的。

以上知识分享希望能够帮助到大家!