GPIO的8种工作模式

本文详细介绍了STM32的GPIO工作模式,包括浮空输入、输入上拉、输入下拉、模拟输入以及四种输出模式:开漏输出、开漏复用功能、推挽式输出和推挽式复用功能。分析了推挽输出和开漏输出的区别,并提供了每个模式的工作原理和电路图。

目录

1.前言

2.I/O端口位的基本结构

3.GPIO的工作模式(8种)
3.1 输入模式 - 浮空输入
3.2 输入模式 - 输入上拉
3.3 输入模式 - 输入下拉
3.4 输入模式 - 模拟输入
3.5 输出模式 - 开漏输出
3.6 输出模式 - 开漏复用功能
3.7 输出模式 - 推挽式输出
3.8 输出模式 - 推挽式复用功能

4.推挽输出和开漏输出的区别简述
4.1 推挽输出
4.2 开漏输出

1.前言

笔者在b站学习【正点原子】 手把手教你学STM32单片机教学视频 嵌入式 之 F103-基于新战舰V3/精英/MINI板 的时候,发现up主所述的GPIO工作原理较为详细。在此,我将 STM32中文参考手册(免费的官网就能下载,还有人在优快云收费???) 与 up主【正点原子官方】的视频中所描述的GPIO工作原理,做一个书面化的整理(仅用于学习,错误之处还请大家指正)。

首先,在此介绍一个简单的概念,即 电平 通常用高低来描述,电压 通常用大小描述。

2.I/O端口位的基本结构

在这里插入图片描述

3.GPIO的工作模式(8种)

GPIO的8种工作模式: 包括 4种 输入模式 和 4种 输出模式

◆ 4种输入模式:
① 输入浮空 GPIO_Mode_IN_FLOATING
② 输入上拉 GPIO_Mode_IPU
③ 输入下拉 GPIO_Mode_IPD
④ 模拟输入 GPIO_Mode_AIN

◆ 4种输出模式:
① 开漏输出 GPIO_Mode_Out_OD
② 开漏复用功能 GPIO_Mode_AF_OD
③ 推挽式输出 GPIO_Mode_Out_PP
④ 推挽式复用功能 GPIO_Mode_AF_PP

3.1 输入模式 - 浮空输入

在这里插入图片描述

图一 浮空输入

如图中黄色阴影部分所示 ,表示在此模式下由 ①~④ 的电路为通路。首先,由 ① I/O端口 输入电平(高或低),经过两只保护二极管后,到达 ② TTL施密特触发器(此时两个开关为断开状态)。其次,电平再由 ② TTL施密特触发器 将电平直接传送到 ③ 输入数据寄存器 中。最后,再通过 ③ 输入数据寄存器 传送至 ④ CPU 中。此时 ④ CPU 便可通过 ③ 输入数据寄存器 等读取到 ① I/O端口 处的高或低电平的情况。

简言之,浮空模式下CPU可以读取到外部输入的高或低电平。

3.2 输入模式 - 输入上拉

在这里插入图片描述

图二 输入上拉

浮空模式输入上拉模式 的主要区别在于, 输入上拉模式 中上拉电阻(连接VDD)的开关闭合(图二中处于黄色区域的上拉电阻的开关闭合),上拉电阻的大小约为 30~50kΩ

3.3 输入模式 - 输入下拉

在这里插入图片描述

图三 输入下拉

同理 ,输入下拉模式浮空模式输入上拉模式 的主要区别在于 输入下拉模式 中下拉电阻(连接VSS)的开关闭合(图二中处于黄色区域的下拉电阻的开关闭合)。

3.4 输入模式 - 模拟输入

在这里插入图片描述

图四 模拟输入

如图中黄色阴影部分所示 ,此模式下 输入上拉输入下拉 失效。该模式可将 外部电压(0~3.3V)转换为 电平(AD转换)。

3.5 输出模式 - 开漏输出

在这里插入图片描述

图五 开漏输出

如图中黄色阴影部分所示 ,首先由 ① CPU位设置/清除寄存器 中写入 1/0,然后 它 将电平的高低映射到 输出数据寄存器 中。随后再到 ② 输出控制电路 中, 若 ② 输出控制电路 接收到 1(高电平),则 ③ N-MOS管 截止。此时 ④ I/O端口 处的电平不是通过接收到 1(高电平)的 ② 输出控制电路 和截止的 ③ N-MOS管 来控制的,而是通过外部的 “上拉” 或 “下拉” 来决定(图五中未画出)。若 ② 输出控制电路 接收到 0(低电平),则 ③ N-MOS管 导通,此时 ④ I/O端口 处的电平被 ③ N-MOS管 拉低为低电平。

在输出状态下,④ I/O端口 的电平还可通过 ④ I/O端口 → ⑥ 输入数据寄存器 → ⑦ CPU读取 的线路读取(此状态在 ② 输出控制电路 接收到高电平“1”时启用)。

3.6 输出模式 - 开漏复用功能

在这里插入图片描述

图六 开漏复用功能

开漏复用功能开漏输出 的区别在于,开漏复用功能② 输出控制电路 处的电平来源不同(开漏复用功能① 复用功能输出 提供,来自“片上外设模块”,即“外设”)。

开漏输出 相同的是,若 开漏复用功能 中的 ② 输出控制电路 接收到 1(高电平),则 ③ N-MOS管 截止。此时 ④ I/O端口 处的电平不是通过接收到 1(高电平)的 ② 输出控制电路 和截止的 ③ N-MOS管 来控制的,而是通过外部的 “上拉” 或 “下拉” 来决定(图六中未画出)。若 ② 输出控制电路 接收到 0(低电平),则 ③ N-MOS管 导通,此时 ④ I/O端口 处的电平被 ③ N-MOS管 拉低为低电平。

3.7 输出模式 - 推挽式输出

在这里插入图片描述

图七 推挽式输出

推挽式输出 的控制输出寄存器和 开漏输出 是相同的。但 推挽式输出 中的 ② 输出控制电路 接收到 1(高电平)时,③ P-MOS管 导通、③ N-MOS管 截止,此时1(高电平)将通过 ③ P-MOS管 传输至 ④ I/O端口 并将1(高电平)输出。相反 推挽式输出 中的 ② 输出控制电路 接收到 0(低电平)时,③ P-MOS管 截止、③ N-MOS管 导通,此时0(低电平)将通过③ N-MOS管传输至 ④ I/O端口 并将0(低电平)输出。

在输出状态下,④ I/O端口 的电平也可通过 ④ I/O端口 → ⑥ 输入数据寄存器 → ⑦ CPU读取 的线路读取。

3.8 输出模式 - 推挽式复用功能

在这里插入图片描述

图八 推挽式复用功能

推挽式输出推挽式复用功能 的主要区别在于,推挽式输出② 输出控制电路 处的电平来源不同(推挽式复用功能① 复用功能输出 提供,来自“片上外设模块”,即“外设”)。

4.推挽输出和开漏输出的区别简述

4.1推挽输出:

可以输出强高低电平,连接数字器件。推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。

4.2开漏输出:

只可以输出强低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极。要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内)。

—————————END—————————

### GPIO 8工作模式的结构图解析 GPIO(General Purpose Input/Output)是微控制器中非常重要的外设,其八种工作模式涵盖了输入和输出的不同配置方式。以下是关于GPIO八种工作模式的结构图解析: #### 输入模式 1. **浮空输入 (GPIO_Mode_IN_FLOATING)** 浮空输入模式下,引脚没有内部上拉或下拉电阻,状态由外部电路决定[^2]。这种模式适用于不需要默认电平的场景。 2. **上拉输入 (GPIO_Mode_IPU)** 在上拉输入模式下,内部上拉电阻启用,确保在无外部信号时引脚处于高电平状态[^2]。 3. **下拉输入 (GPIO_Mode_IPD)** 下拉输入模式下,内部下拉电阻启用,确保在无外部信号时引脚处于低电平状态[^2]。 4. **模拟输入 (GPIO_Mode_AIN)** 模拟输入模式用于连接模数转换器(ADC),允许读取模拟信号[^1]。 #### 输出模式 5. **开漏输出 (GPIO_Mode_Out_OD)** 开漏输出模式下,输出引脚仅能驱动低电平,需要外部上拉电阻来实现高电平[^1]。 6. **推挽输出 (GPIO_Mode_Out_PP)** 推挽输出模式可以主动驱动高电平和低电平,适用于大多数数字信号输出场景[^1]。 #### 复用模式 7. **复用开漏输出 (GPIO_Mode_AF_OD)** 复用开漏输出模式GPIO引脚配置为复用功能,并以开漏形式工作[^1]。 8. **复用推挽输出 (GPIO_Mode_AF_PP)** 复用推挽输出模式GPIO引脚配置为复用功能,并以推挽形式工作[^1]。 #### 结构图说明 GPIO的八种工作模式可以通过以下结构图表示: ```plaintext +-----------------------------+ | GPIO Pin | +-----------------------------+ | | | Input Modes: | | - Float | | - Pull-Up | | - Pull-Down | | - Analog | | | | Output Modes: | | - Open Drain | | - Push-Pull | | | | Alternate Function Modes: | | - AF Open Drain | | - AF Push-Pull | | | +-----------------------------+ ``` 上述结构图展示了GPIO的八种工作模式分类,分为输入模式、输出模式和复用模式。每种模式的具体实现依赖于硬件配置和软件初始化代码。 #### 示例代码:配置GPIO模式 以下是一个基于STM32GPIO配置示例代码: ```c #include "stm32f10x.h" void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStruct; // 使能GPIO端口时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置为推挽输出模式 GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStruct); } ``` 此代码片段展示了如何将STM32GPIOA_0配置为推挽输出模式
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

學不董Gavin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值