GPIO的8种输入输出模式和引脚封装

本文详细介绍了GPIO的8种输入输出模式,包括模拟输入、浮空输入、下拉输入、上拉输入、推挽输出、开漏输出、复用推挽输出和复用开漏输出。此外,还探讨了GPIO引脚封装的特点,如引脚数量、电压兼容性、复用功能以及特定引脚的限制和初始化注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
1、模拟输入:专用于ADC通道的输入,输入信号为模拟信号。其他的输入均为数字信号输入。在上图中,模拟信号跳过上下拉电阻,直接输入到IO逻辑电路。

2、浮空输入:输入信号为数字信号。在上图中,数字信号直接跳过上下拉电阻,直接输入到IO逻辑电路。

3、下拉输入:输入信号为数字信号。在上图中,数字信号经过一个弱下拉电阻,再输入到IO逻辑电路。当IO脚上没有任何输入输出信号时,由弱下拉电阻保持该引脚的电平为低电平。

4、上拉输入:输入信号为数字信号。在上图中,数字信号经过一个弱上拉电阻,再输入到IO逻辑电路。当IO脚上没有任何输入输出信号时,由弱上拉电阻保持该引脚的电平为高电平。GPIO被配置为输入模式时,通常使用最多的就是上拉输入。上拉输入时既能输入,也能输出,因此当该IO脚既要读取输入信号,又要输出信号时,也用上拉输入。

5、推挽输出:输出信号为数字信号。不仅能输出给外部一个高低电平的信号,还有驱动电流的能力,能驱动元器件,输出能力较开漏输出要大。例如,通过IO输出高电平来点亮LED灯,就是使用推挽输出,开漏输出不能驱动LED灯亮。GPIO被配置为输出模式时,通常使用最多的就是推挽输出。

6、开漏输出:输出信号为数字信号。不能驱动元器件,只是输出给

### GPIO引脚输入输出模式配置 对于GPIO引脚,其工作模式可以通过特定寄存器或API函数来设定。在嵌入式开发环境中,通常存在多种方式实现这一目标。 #### 使用枚举定义模式 在一个典型的微控制器库中,如STM32标准外设库,提供了`GPIOMode_TypeDef`枚举类型用于指定不同的GPIO操作模式[^1]: ```c 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引脚配置成输入模式,可以选择浮空输入、上拉电阻输入或是下拉电阻输入三种形式之一。这取决于具体的应用场景以及对外部电路的要求。例如,在初始化阶段可以这样设置一个引脚作为带有内部上拉电阻的输入端口: ```c GPIO_InitTypeDef GPIO_InitStruct; // 初始化结构体成员变量 GPIO_InitStruct.Pin = GPIO_PIN_0; // 设定为第0号针脚 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; // 输入模式 GPIO_InitStruct.Pull = GPIO_PULLUP; // 启用上拉电阻 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 应用配置至GPIOA端口 ``` 这段代码利用了硬件抽象层(HAL) API来进行更高级别的封装调用,简化了底层细节处理过程。 #### 设置为输出模式 同样地,如果希望把某根线缆转变为输出用途,则需指明是采用普通的高低电平驱动还是具备特殊功能(比如复用)。下面的例子说明了怎样让一根连接到PA9的数据总线上变更为常规推挽型输出接口: ```c GPIO_InitTypeDef GPIO_InitStruct; // 初始化结构体成员变量 GPIO_InitStruct.Pin = GPIO_PIN_9; // PA9 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出模式 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; // 输出速度等级 GPIO_InitStruct.Pull = GPIO_NOPULL; // 不启用上下拉 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); // 对应于GPIOA的操作 ``` 这里还额外设置了输出的速度参数,它决定了数据变化速率;而无上下拉意味着该线路处于三态门状态直到被其他逻辑单元接管为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值