【STM32】GPIO内部电路工作原理详解

前言

笔者近日在B站刷到了一个视频,使我对GPIO的I/O口内部基本结构以及工作原理有了恍然大明白的理解,现在对此做一个总结,并为大家推荐该视频Keysking

【STM32】GPIO内部电路原理

  • 前言
  • GPIO内部结构概览
  • GPIO内部结构详解
  • 保护电路
  • 输出电路
  • 推挽输出
  • 开漏输出
  • 输入电路
  • 总结
  • 参考资料
  • GPIO内部结构概览

    结构关系图如下图所示

    GPIO内部结构详解

    保护电路


    PS:
    当I/O口为FT 5V容忍时,其上方保护二极管电压Vdd = 5V
    保护二极管不能长期导通,否则会烧坏保护二极管。所以保护电路只能抵御一瞬间的电压波动,较长时间的电压波动仍会损坏芯片

    输出电路

    推挽输出


    流程图
    代码 –> 寄存器 –> 输出控制器 –> 控制P-MOS/N-MOS的导通与断开 –> 输出的电压

    分类讨论
    SET置1:P-MOS导通 N-MOS断开 芯片输出3.3V(此电压由芯片输出,所以推挽输出有驱动能力
    RESET置0:P-MOS断开 N-MOS导通 芯片输出0V

    开漏输出


    前提:在开漏输出下,P-MOS一直断开,所以在图上我直接将其删去以简化单路

    以I/O口外接工作电压为5v的小灯泡为例
    开漏输出更像是一个电子开关,小灯泡的工作电压由小灯泡外接的5V提供(注意,此I/O口需5V容忍)。因为电压由外部提供,所以开漏输出无驱动能力(他只是个电子开关 不提供电压 所以当然没驱动能力)

    分类讨论
    SET置1:N-MOS导通 电路通路 小灯泡电压由外部5V提供 灯亮
    RESET置0:N-MOS断开 电路内部高阻态 电路断路 无电流 灯灭

    所以,开漏输出的高电平实际是高阻态 无法输出电流 无驱动能力

    输入电路


    上下拉电阻
    Pull-up上拉:开关1闭合,I/O引脚内部上拉
    Pull-down下拉:开关2闭合,I/O引脚内部下拉
    不上拉也不下拉:开关1、2均不闭合,I/O引脚内部浮空 电平不确定
    PS:I/O口输入可以配置内部的上下拉电阻,为硬件功能实现提供了更多的可能(比如KEY按键模块中,如果KEY模块没有配置外部的上拉电阻,则可以通过自行配置内部的上下拉电阻来实现功能。具体请参考B站

    TTL肖特基触发器
    实际上是模拟电压 –> 数字电压

    高低参考电压之间,维持原本电平信号不变,以此来抗噪声

    PS:
    Q:为什么没有复用输入模式?
    A:因为复用功能输入与通用功能输入可以同时读取施密特触发器的输

    总结

    对于GPIO内部结构而言,通过不同的配置可以完成不同的输入输出功能
    输出
    代码 –> 寄存器 –> 输出控制模块 –> 控制P-MOS与N-MOS的导通与断开情况 –> 推挽/开漏输出
    输入
    I/O口输入模拟电压 –> 上下拉电阻 –> 施密特触发器 –> 数字电压 –> 存储到输入数据寄存器

    参考资料

    GPIO内部的那些事儿_Keysking

    作者:Abaaba+

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【STM32】GPIO内部电路工作原理详解

    发表回复