GPIO输入输出模式

本文详细介绍了GPIO接口的四种常见工作模式:浮空输入、上拉/下拉输入、推挽输出及开漏输出。每种模式的工作原理、应用场景及特点都被清晰地阐述,为读者提供了深入理解GPIO接口的基础。

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

浮空输入:引脚处电压由外接电路决定,电平可能是高,也可能是低,还可能非高非低,多用于ADC的输入

上拉/下拉输入:引脚未接外部电路时引脚处电压由芯片提供上拉为高电平下拉为低电平

推挽输出:可设置引脚为高电平或低电平

开漏输出:软件置0输出低电平,软件置1引脚电平由外接电路决定和浮空输入类似

### 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、付费专栏及课程。

余额充值