从“没信号”到示波器上跳动的波形:一个硬件工程师的MAX232实战手记
去年冬天,我帮一家做电力监测终端的客户调试一款新板子。MCU是STM32F407,串口引脚接了MAX232,DB9母座焊得工整漂亮——可连上PC串口助手后,发送什么,返回什么;发‘A’回‘A’,发‘1’回‘1’,像镜子一样对称,但就是收不到任何有效响应。客户说:“我们以前用的板子都好好的,这版改了PCB,是不是MAX232坏了?”
我没有急着换芯片,而是拿起万用表,黑表笔搭在DB9 Pin5(GND),红表笔点T1OUT——读数是–9.8V;再点R1IN,空载测出+0.2V。看起来电平“有”,驱动“有力”,接收端却始终不“认账”。那天下午,我在实验室里反复拆焊C1电容、重铺地线、查数据手册第17页的时序图……直到把示波器探头夹在T1IN和T1OUT之间,才真正看懂了那条被教科书轻描淡写带过的“电荷泵”。
这不是一篇讲MAX232参数的手册复读机,而是一份来自真实电路板背面的笔记:关于电压怎么凭空翻倍,关于为什么一颗1μF电容能决定通信距离是3米还是30厘米,关于当你按下回车键后,那一串0和1如何在±10V之间完成一次精准的跨电平握手。
电平转换不是“接根线就通”,而是两套逻辑世界的翻译协议
先抛开所有芯片型号,回到最原始的问题:
MCU的UART_TX引脚输出的是什么?
是一段以0V为低、3.3V(或5V)为高的数字波形,上升沿陡、下降沿快,参考地是它自己的VSS;PC的COM口期待的是什么?
是一段以0V为中点、–3V~–15V代表逻辑1、+3V~+15V代表逻辑0的双极性信号,参考地是它的机壳地;这两者之间没有共通的“电压词典”——就像中文母语者听日语广播,音节都在,但无法解码。
所以RS232通信的第一道门槛,从来不是波特率配不配得上,而是:你有没有给两个系统之间建一座电压意义上的“海关”?
MAX