GPIO的八种工作模式
八种工作模式概括
GPIO八种模式 | 输入/输出 | 简介 |
---|---|---|
输入浮空 | 输入用 | 完全浮空,状态不定 |
输入上拉 | 输入用 | 用内部上拉,默认是高电平 |
输入下拉 | 输入用 | 用内部下拉,默认是低电平 |
模拟功能 | 输入输出均可 | ADC、DAC |
开漏输出 | 输出用 | 软件IIC的SDA、SCL等 |
推挽输出 | 输出用 | 驱动能力强,25mA(max),通用输出 |
开漏式复用功能 | 输出用 | 片上外设功能(硬件IIC 的SDA、SCL引脚等) |
推挽式复用功能 | 输出用 | 片上外设功能(SPI 的SCK、MISO、MOSI引脚等) |
接下来,就用通俗易懂的话来解释一下各个工作模式的特点以及工作流程
附图:GPIO结构框图
==① 保护二极管 ② 内部上拉、下拉电阻 ③ 施密特触发器 P-MOS & N-MOS管==
输入浮空模式
- 特点:IO口电平完全由外部电路决定
- 原件开关情况:上下拉电阻断开,施密特触发器打开,输出模块被禁止
- 应用:常用于按键检测
输入上拉模式
- 特点:空闲时,IO呈现高电平
- 原件开关情况:上拉电阻接通,下拉电阻断开,施密特触发器打开,输出模块被禁止
- 应用:需要“弱上拉”的情况,可节省一个外部电阻
输入下拉模式
- 特点:空闲时,IO呈现低电平
- 原件开关情况:上拉电阻断开,下拉电阻导通,施密特触发器打开,输出模块被禁止
- 应用:可节省一个外部电阻
模拟功能
- 特点:(1)走的路比较独特。数据输入不经过数据输入寄存器,而是直接走模拟输入通道(2)该模式下需要用到芯片内部的模拟电路单元
- 原件开关情况:上拉电阻断开,下拉电阻断开,施密特触发器关闭,输出模块被禁止
- 应用:用于模拟信号输入或输出场景,如:ADC和DAC
开漏输出
- 特点:只能输出低电平Vss或者高阻态。必须有外部上拉电阻才能输出高电平(对于F1系列来说)
- 应用:常用于 IIC 通讯或其它需要进行电平转换的场景。
- 首先要明确三点:
(1)在开漏输出模式下,P-MOS管永远处于截止状态(即不导通),因此 IO 的状态取决于 N-MOS 的导通状况
(2)输出数据寄存器的输出数据都会进行一次“输出控制”的取反操作
(3)施密特触发器仍然工作,但上下拉电阻不工作,所以输入部分可以看成浮空输入,可以读取到IO口的工作状态
IO的输出过程:(请对照GPIO结构框图学习)(在上面)
可以分为向输出寄存器输出逻辑1和0两种情况:- 输出数据寄存器输出逻辑0 --> “输出控制”进行取反操作 --> 逻辑1到达N-MOS的栅极 --> N-MOS输出低电平
- 输出数据寄存器输出逻辑1 -> “输出控制”进行取反操作 -> 逻辑0到达N-MOS的栅极 -> N-MOS被截止 -> IO呈现高阻态(既不输出高,也不输出低)
- 其示意图如下:
开漏复用功能
当GPIO处于该种工作模式时,其与开漏模式基本相同。
唯一的区别就是:IO口输出的东西不再受输出数据寄存器影响,而是由其他的外设来控制输出
推挽输出
- 特点:即可以输出低电平 VSS 也可以输出高电平VDD。且输出的最大电流能达到25mA的驱动电流,具有较强的驱动能力。
- 首先明确两点:
(1)推挽模式下,P-MOS 管和 N-MOS 管同时起作用(2)输出数据寄存器的输出数据都会进行一次“输出控制”的取反操作
IO的输出过程:(请对照GPIO结构框图学习)(在上面)
仍然可以分为向输出寄存器输出逻辑1和0两种情况:- 输出数据寄存器输出逻辑0 --> “输出控制”进行取反操作 --> 逻辑1到达P-MOS的栅极 --> P-MOS管被截止 --> 输出逻辑1到 N-MOS 管的栅极 --> N-MOS导通 --> IO接到VSS --> 输出低电平
- 输出数据寄存器输出逻辑1 --> “输出控制”进行取反操作 --> 逻辑0到达N-MOS的栅极 --> N-MOS管被截止 --> 输出逻辑0到 P-MOS 管的栅极 --> P-MOS导通 --> IO接到VDD --> 输出高电平
其示意图如下:
综上所述,我们可知:
- 推挽输出模式下,P-MOS 管和 N-MOS 管同一时间只能有一个管是导通的。
- 当 IO 引脚在做高低电平切换时,两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都有较大的提高。
推挽复用功能
当GPIO处于该种工作模式时,其与推挽模式基本相同。
唯一的区别就是:IO口输出的东西不再受输出数据寄存器影响,而是由其他的外设来控制输出
F4/F7/H7系列和F1系列的GPIO差异点
- F1在输出模式,禁止使用内部上下拉
F4/F7/H7在输出模式,可以使用内部上下拉 - 不同系列IO翻转速度可能不同