GPIO端口各种模式

GPIO端口各种模式的区别
(1)GPIO_Mode_AIN 模拟输入
(2)GPIO_Mode_IN_FLOATING 浮空输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_IPU 上拉输入
(5)GPIO_Mode_Out_OD 开漏输出
(6)GPIO_Mode_Out_PP 推挽输出
(7)GPIO_Mode_AF_OD 复用开漏输出
(8)GPIO_Mode_AF_PP 复用推挽输出

区别主要看用途。

推挽输出和开漏输出是GPIO引脚模式里,输出模式的两种。
推挽输出和开漏输出是根据这两个 MOS 管的工作方式来命名的。

输出模式:
电路如下图所示。
线路经过一个由 P-MOS 和 N-MOS 管组成的单元电路
在这里插入图片描述
电路组成:线路经过一个由 P-MOS 和 N-MOS 管组成的单元电路。

推挽输出

电路原理:
输入高电平时,经过反向后,上方的 P-MOS 导通,下方的 N-MOS 关闭,对外输出高电平;而在该结构中输入低电平时,经过反向后,N-MOS管导通,P-MOS 关闭,对外输出低电平

特性:
推挽输出既可以输出低电平,也可以输出高电平,可以直接驱动功耗不大的数字器件。导通损耗小、效率高、既提高电路的负载能力,又提高开关速度。

用途:
推挽输出模式一般应用在输出电平为 0 和 3.3 伏而且需要高速切换开关状态的场合。

推挽输出模式时的等效电路如下图所示推挽输出模式时的等效电路

开漏输出

电路原理:
上方的 P-MOS 管完全不工作。如果我们控制输出为 0,低电平,则 P-MOS 管关闭N-MOS 管导通,使输出接地,若控制输出为 1 (它无法直接输出高电平)时,则P-MOS 管和 N-MOS 管都关闭,所以引脚既不输出高电平,也不输出低电平,为高阻态
正常使用时必须外部接上拉电阻。它具有“线与”特性,也就是说,若有很多个开漏模式引脚连接到一起时,只有当所有引脚都输出高阻态,才由上拉电阻提供高电平,此高电平的电压为外部上拉电阻所接的电源的电压

特性:
开漏输出只能输出低电平,如果要输出高电平必须通过上拉电阻才能实现。就类似于三极管的集电极输出。

用途:
一般应用在 I2C、SMBUS 通讯等需要“线与”功能的总线电路中。
除此之外,还用在电平不匹配的场合,如需要输出 5 伏的高电平,就可以在外部接一个上拉电阻,上 拉电源为 5 伏,并且把 GPIO 设置为开漏模式,当输出高阻态时,由上拉电阻和电源向外输出 5 伏的电平,如下图所示。
在这里插入图片描述

开漏输出模式时的等效电路如下图所示
开漏输出模式时的等效电路

上拉、下拉输入:上拉和下拉输入很好理解,默认的电平由上拉或者下拉决定。

浮空输入:浮空输入的电平是不确定的,完全由外部的输入决定,一般接按键的时候用的是这个模式。

模拟输入:用于 ADC 采集。

### STM32GPIO端口模式的配置方法 在STM32微控制器中,GPIO端口的每个引脚都可以通过软件配置为多种工作模式,包括输入浮空、输入上拉、输入下拉、模拟输入、开漏输出、推挽输出、复用开漏输出和复用推挽输出等。这种灵活性使得GPIO可以适应不同的应用需求,例如通用输入输出、外设功能复用等。 每个GPIO端口由多个寄存器控制,包括两个32位配置寄存器(GPIOx_CRL和GPIOx_CRH),它们分别控制端口的低8位和高8位引脚的工作模式和输出类型。通过设置这些寄存器的相应位,可以实现对每个引脚的独立配置[^3]。 #### 配置步骤 在配置GPIO端口的工作模式时,通常需要以下几个步骤: 1. **使能GPIO端口时钟** 在使用任何GPIO端口之前,必须先使能其对应的时钟。例如,若使用GPIOC和GPIOE端口,则需调用`RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);` 和 `RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);` 来使能时钟[^1]。 2. **定义并初始化GPIO结构体变量** 通过定义一个`GPIO_InitTypeDef`类型的结构体变量,并对其成员进行赋值,以设置所需的工作模式、输出类型、速度、上拉/下拉电阻等参数。例如: ```c GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 选择引脚0 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // 设置为输出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置输出速度为50MHz GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; // 设置为推挽输出 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // 不使用上拉或下拉 ``` 3. **调用初始化函数** 使用`GPIO_Init()`函数将结构体中的配置应用到指定的GPIO端口。例如: ```c GPIO_Init(GPIOC, &GPIO_InitStructure); ``` #### 其他注意事项 - **复用功能配置** 如果需要将GPIO引脚用于外设功能(如定时器、串口等),还需要调用`GPIO_PinAFConfig()`函数来配置引脚的复用功能映射。该函数接受三个参数:GPIO端口、引脚号和复用功能编号。例如: ```c GPIO_PinAFConfig(GPIOF, GPIO_PIN_9, GPIO_AF_TIM14); ``` 此操作确保指定的引脚被正确映射到相应的外设功能上。需要注意的是,若相应的外设模块未被激活,则此时IO端口的输出将不确定[^1]。 - **输出控制** 在输出模式下,可以通过`GPIO_SetBits()`和`GPIO_ResetBits()`函数分别将引脚设置为高电平或低电平。例如: ```c GPIO_SetBits(GPIOC, GPIO_Pin_0); // 设置GPIOC的引脚0为高电平 GPIO_ResetBits(GPIOC, GPIO_Pin_0); // 设置GPIOC的引脚0为低电平 ``` 这些函数直接操作GPIOx_ODR寄存器,以实现对输出电平的控制[^2]。 ### 总结 通过合理配置GPIO的寄存器,开发者可以灵活地设置每个引脚的工作模式,从而满足不同的应用需求。无论是通用输入输出还是外设功能复用,都需要按照上述步骤进行配置,并确保外设模块已正确激活,以避免输出状态的不确定性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值