ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

STM32 GPIO推挽与开漏输出全解析

STM32 GPIO推挽与开漏输出全解析 第一课时GPIO 输出模式、复用与输出速度本课主题GPIO 的推挽和开漏两种输出方式以及通用、复用、IO 最大输出速度。课程视频STM32 HAL库 GPIO 输出需要CubMxkeil5的可以去看山羊哥的视频这里的笔记仅仅做配合视频教学和复习只用往后不再赘述。一、GPIO推挽与开漏这一节讲 GPIO 的两种输出方式推挽和开漏以及它们的等效图。先说一下GPIO 的全称是 General Purpose Input/Output也就是通用目的的输入输出平时说的通用 IO 口就是它。这张图是教材里的 I/O 端口位基本结构信息量比较大。上半部分是输入方向数据从引脚进来经过输入数据寄存器和 TTL 肖特基触发器可以读出也可以接到片上外设。下半部分是输出方向数据从输出数据寄存器出来经过输出控制驱动一对 P-MOS 和 N-MOS再送到引脚同时还带复用功能输出、开漏或推挽的选择。靠引脚的地方还有两个保护二极管接到 VDD 和 VSS防止引脚电压超出范围把芯片打坏。图右边列出了 GPIO 的 8 种工作模式。输出有通用输出推挽、通用输出开漏、复用输出推挽、复用输出开漏四种输入有输入上拉、输入下拉、输入浮空、模拟模式四种。本课重点讲输出的这四种。1.1 MOS 管等效于开关看等效图MOS 管实际上等同于一个开关导通相当于闭合截止相当于断开。图里画出了输出级的两只 MOS 管上面一只 P-MOS 接到 Vdd下面一只 N-MOS 接到 Vss两只管子中间就是引脚。理解的时候把 MOS 管看成开关就行栅极给信号开关通或断从而决定引脚连到 Vdd 还是 Vss。1.2 什么是推挽推挽push-pull的输出级用一对 MOS 管上面一个 P-MOS下面一个 N-MOS两者交替导通来输出电平。要输出高电平就上方 P-MOS 导通、下方 N-MOS 关断输出端被接到 VDD电流推出去要输出低电平就下方 N-MOS 导通、上方 P-MOS 关断输出端被接到 VSS电流拉回来。一推一拉轮流工作所以叫推挽。它的好处是高低两种电平都能主动输出驱动能力强。1.3 开关导通交替不同信号下的情况对应视频位置02:28开关交替导通不同信号下代表的情况如下。推挽是交替导通。数字 0 时 P-MOS 关断、N-MOS 导通引脚接到 Vss输出低电平数字 1 时 P-MOS 导通、N-MOS 关断引脚接到 Vdd输出高电平。开漏则是上管恒断上方的 P-MOS 永远断开只有下面的 N-MOS 起作用。1.4 开漏模式开漏模式的等效图如下。这张图把开漏的两种输出状态都画全了。N-MOS 导通时引脚接到 Vss输出低电平N-MOS 关断时上下都不通引脚悬空也就是高阻抗。图中标了 R 等于 U 除以 0 等于无穷电流恒为 0意思是这时相当于断路几乎不流过电流。关键点是开漏模式下上方的 P-MOS 一直不导通所以当下方 MOS 关断时输出端上下都不通就会出现高阻抗也就是悬空。推挽输出是一对 MOS 管交替导通对外输出低电压或高电压开漏输出是 PMOS 保持关断对外输出低电压或高阻抗。要特别注意开漏所谓输出 1 其实不是真的高电平而是高阻想要高电平必须在外部接一个上拉电阻把引脚拉高。1.5 VDD 和 VSS 为什么在推挽模式中变成了高电压、低电压VDD 和 VSS 本身并没有变它们始终代表电源正极和地线。所谓高电压、低电压说的是输出端被连到了哪一边。P-MOS 导通时输出端接到 VDD就是高电平N-MOS 导通时输出端接到 VSS就是低电平。所以不是 VDD、VSS 变成了高低电压而是开关把输出端在 VDD 和 VSS 之间来回切换我们看到的才是高电平或低电平。1.6 为什么地线 VSS 接通时能实现低电压电压是相对的它是两点之间的电位差单独一个点谈不上电压。打个比方说海拔 100 米是相对海平面说的没有基准这个数字就没意义。电路里人为约定 VSS也就是地是 0V 的基准点VDD 相对它有一个正电位比如 3.3V。数字电路判高低就看输出端的电位。接 VDD 时电位 3.3V与地差 3.3V是高电平接 VSS 时与地同电位差 0V就是低电平。VSS 本身不是低电压它是我们选定的 0 基准输出端一接通它就和基准持平自然算低。再从电流角度看VDD 是电源正是源头VSS 是回流终点好比排水口。N-MOS 把输出端接到 VSS 时电流灌入地输出电位被拽到 0V这就是拉低对应 P-MOS 接 VDD 是推高。二、通用以及复用通用是直接通过程序控制高低电压的输出和输入。复用是把引脚交给片上外设托管比如串口、定时器由外设按自己的时序去驱动这个引脚借用引脚实现外设功能。这张表把输出方式和通用、复用两组概念做了搭配组合推挽开漏通用通用输出推挽通用输出开漏复用复用输出推挽复用输出开漏这样就凑出了输出的四种模式再加上输入的四种正好是前面说的 8 种工作模式。三、IO 最大输出速度先看实际和理想的对比。理想情况下高低电平切换是瞬间完成的也就是方方正正的方波。但现实里电平从低到高、从高到低都需要时间方波就被削成了梯形波上升沿和下降沿都是斜的这段斜边占用的时间就是上升时间和下降时间。由于上升速度和下降速度的存在为了保持有效的输出电压时间这两个时间必须越短越好边沿越短留给稳定输出的时间就越长。图片Pasted image 20260922120410.pngSTM32 把输出速度分成三档图中用波形的上升、保持、下降时间作了对比档位速度上升 / 保持 / 下降时间低速2MHz125ns / 250ns / 125ns中速10MHz25ns / 50ns / 25ns高速50MHz5ns / 10ns / 5ns数字越小边沿越陡同样时间内能完成的切换次数就越多也就允许跑更高的频率。通常来说都要选取满足要求的最小值。速度越高边沿越陡信号里的高频成分越多功耗就越大电磁干扰和串扰也会增强严重时会影响甚至损坏电路板上的敏感元器件。各种例子怎么选满足要求的最小值看图右边的三个例子。LED 灯闪烁频率只有几百 Hz选低速 2MHz 就够Infineon TLE5012BD 输出 8Mbps选中速 10MHzUSB 2.0 Full Speed 是 12Mbps选高速 50MHz。结论是只要最低那一档能满足需求就不要往高了选。四、小结这一课把 GPIO 输出的几个关键点串了一遍。推挽和开漏是两种不同的输出方式推挽靠一对 MOS 管交替导通能主动输出高电平和低电平驱动能力强开漏只有下方的 N-MOS 起作用上管恒断输出低电平或高阻抗想要高电平必须外接上拉电阻。通用和复用是两种使用方式通用由程序直接控制引脚复用则把引脚交给串口、定时器等片上外设托管。IO 最大输出速度分低速、中速、高速三档速度越高边沿越陡、能跑更高频率但功耗和干扰也越大所以通常选满足要求的最低档。实际用的时候判断一个引脚该配哪种模式先看它要干什么普通点灯、驱动 LED 用通用输出推挽需要线与逻辑、电平转换或驱动开漏器件就用开漏并接上拉引脚要交给串口、定时器等外设就选复用输出。速度档位则按信号频率来定能低就低。把这几个概念理清楚后面看 CubMx 里的 GPIO 配置界面就不会一头雾水了。下一课可以接着讲 GPIO 的输入模式比如上拉、下拉、浮空和模拟模式以及它们各自适合接什么外设。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进