UART接线看起来没错,为什么一直乱码甚至没数据?先分清TTL、RS-232和共地
做板级调试时,UART通常是最常用的接口之一。
TX接RX、RX接TX,波特率也设成115200,看起来都没问题。
但电脑就是收不到数据,或者满屏乱码。
这时候很多小白会一直改软件参数。其实UART不通,首先应该确认的不是代码,而是你两边接的到底是不是同一种电气接口。
UART本质上描述的是一种异步串行通信方式:起始位、数据位、停止位这些规则怎么组织。
而TTL/CMOS串口说的是芯片引脚上的电压,例如0V和3.3V。
RS-232又是另一套电气标准,它的线缆侧通常使用正负电压,而且逻辑还会反相。
所以MCU的3.3V UART引脚,不能因为“也是串口”,就直接接到传统RS-232接口上。

图1:RS-232使用正、负电压表示逻辑状态,和MCU常见的0~3.3V CMOS电平不是同一种接口。
因为常见的USB转TTL模块,输出侧就是3.3V或5V逻辑电平,可以和MCU UART直接连接。
但如果你拿的是USB转RS-232模块,模块外侧已经通过收发器变成RS-232电平,这时候就不能直接进MCU。
真正的RS-232接口通常要通过MAX3232这类收发器,把MCU的TTL/CMOS电平转换成RS-232线缆电平,再在接收端转换回来。

图2:MCU UART和RS-232接口之间通常需要专门的收发器完成电平转换和逻辑反相。
TTL UART是单端信号。接收端判断高低电平时,是拿RX电压和自己的GND做比较。
如果两块板只有TX、RX连接,却没有一个可靠的公共参考地,那么接收端看到的电压参考可能一直在漂。
短距离桌面测试时有时“碰巧能用”,换一个电源、换一根线,马上开始乱码。
所以板级TTL UART通常至少要有TX、RX和GND三个连接。
5V设备发出的高电平可能接近5V。
如果3.3V MCU的RX引脚不是5V tolerant,长期直接输入可能超出绝对最大额定值。
反过来,3.3V TX接5V器件时,也要确认对方输入高电平门限。很多5V CMOS器件并不保证3.3V一定能被识别为高电平。
所以最稳妥的方法不是凭经验,而是查两边datasheet的VIH、VIL和输入耐压。

图3:真实RS-232波形会跨过0V正负摆动,和普通3.3V UART波形非常容易区分。
第一,确认TX和RX有没有接反。
第二,示波器看空闲电平和实际摆幅,确认到底是3.3V TTL、5V TTL还是正负电压的RS-232。
第三,确认两端GND参考。
第四,再检查波特率、数据位、停止位、校验位。
第五,如果只有高波特率才乱码,再去看波形边沿、线长和地噪声。

图4:DB9等传统串口连接器上的信号定义与板级MCU UART并不是简单的一根TX、一根RX。
声明:
本文由凡亿教育整理,转载请注明来源!
投稿/招聘/广告/课程合作/资源置换 请加微信:13237418207

扫码关注














































