STM32F1系列GPIO的八种工作模式

GPIO的八种工作模式

八种工作模式概括

GPIO八种模式 输入/输出 简介
输入浮空 输入用 完全浮空,状态不定
输入上拉 输入用 用内部上拉,默认是高电平
输入下拉 输入用 用内部下拉,默认是低电平
模拟功能 输入输出均可 ADC、DAC
开漏输出 输出用 软件IIC的SDA、SCL等
推挽输出 输出用 驱动能力强,25mA(max),通用输出
开漏式复用功能 输出用 片上外设功能(硬件IIC 的SDA、SCL引脚等)
推挽式复用功能 输出用 片上外设功能(SPI 的SCK、MISO、MOSI引脚等)

接下来,就用通俗易懂的话来解释一下各个工作模式的特点以及工作流程

GPIO结构框图

附图: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两种情况:

    1. 输出数据寄存器输出逻辑0 --> “输出控制”进行取反操作 --> 逻辑1到达N-MOS的栅极 --> N-MOS输出低电平
    2. 输出数据寄存器输出逻辑1 -> “输出控制”进行取反操作 -> 逻辑0到达N-MOS的栅极 -> N-MOS被截止 -> IO呈现高阻态(既不输出高,也不输出低)
    3. 其示意图如下:
graph TB begin(输出数据寄存器输出逻辑)--> branch1[输出0] --> branch1_1{输出控制进行取反操作} begin --> branch2[输出1] --> branch1_1 branch1_1 --> logic1[逻辑1到达N-MOS的栅极] branch1_1 --> logic0[逻辑0到达N-MOS的栅极] logic1 --> outputLow[N-MOS输出低电平] logic0 --> outputHigh[N-MOS被截止] outputLow --> IOlow(IO口输出低电平) outputHigh --> IOno(IO呈现高阻态,既不输出高也不输出低)
开漏复用功能

当GPIO处于该种工作模式时,其与开漏模式基本相同

唯一的区别就是:IO口输出的东西不再受输出数据寄存器影响,而是由其他的外设来控制输出

推挽输出
  • 特点:即可以输出低电平 VSS 也可以输出高电平VDD。且输出的最大电流能达到25mA的驱动电流,具有较强的驱动能力。

  • 首先明确两点:
    (1)推挽模式下,P-MOS 管和 N-MOS 管同时起作用

    (2)输出数据寄存器的输出数据都会进行一次“输出控制”的取反操作

  • IO的输出过程:(请对照GPIO结构框图学习)(在上面)
    仍然可以分为向输出寄存器输出逻辑1和0两种情况:

    1. 输出数据寄存器输出逻辑0 --> “输出控制”进行取反操作 --> 逻辑1到达P-MOS的栅极 --> P-MOS管被截止 --> 输出逻辑1到 N-MOS 管的栅极 --> N-MOS导通 --> IO接到VSS --> 输出低电平
    2. 输出数据寄存器输出逻辑1 --> “输出控制”进行取反操作 --> 逻辑0到达N-MOS的栅极 --> N-MOS管被截止 --> 输出逻辑0到 P-MOS 管的栅极 --> P-MOS导通 --> IO接到VDD --> 输出高电平
    3. 其示意图如下:
    graph TB begin(输出数据寄存器输出逻辑)--> branch1[输出0] --> branch1_1{输出控制进行取反操作} begin --> branch2[输出1] --> branch1_1 branch1_1 --> logic1[逻辑1到达P-MOS的栅极] logic1 --> pmos_cut[P-MOS管被截止] pmos_cut -->send1ToNmos[输出逻辑1到 N-MOS 管的栅极] send1ToNmos --> nmosPass[N-MOS导通] nmosPass --> IOVSS[IO接到VSS] IOVSS --> outLow(输出低电平) branch1_1 --> logic0[逻辑0到达N-MOS的栅极] logic0 --> nmos_cut[N-mos管被截止] nmos_cut --> send0ToPmos[输出逻辑0到 P-MOS 管的栅极] send0ToPmos --> pmosPass[P-MOS导通] pmosPass -->IOVDD[IO接到VDD] IOVDD --> outHigh(输出高电平)

综上所述,我们可知:

  • 推挽输出模式下,P-MOS 管和 N-MOS 管同一时间只能有一个管是导通的。
  • 当 IO 引脚在做高低电平切换时,两个管子轮流导通,一个负责灌电流,一个负责拉电流,使其负载能力和开关速度都有较大的提高。
推挽复用功能

当GPIO处于该种工作模式时,其与推挽模式基本相同

唯一的区别就是:IO口输出的东西不再受输出数据寄存器影响,而是由其他的外设来控制输出

F4/F7/H7系列和F1系列的GPIO差异点
  1. F1在输出模式,禁止使用内部上下拉
    F4/F7/H7在输出模式,可以使用内部上下拉
  2. 不同系列IO翻转速度可能不同
posted @ 2023-01-12 00:59  不会嵌入式的摆烂王  阅读(779)  评论(0)    收藏  举报