UART最烦人的一种故障,是板子自己环回正常,MCU内部日志也正常,一接USB转串口到电脑就开始乱码。
然后大家最爱做的一件事,就是把115200改成9600,再改成57600,再换几个串口工具。
有时候还真能碰巧好一点。
但我一般会先停一下,确认你手里那根“USB转串口”到底是什么东西。
第一件事:先分清TTL UART和RS-232这两个接口都经常被叫“串口”,但电气层完全不是一回事。
MCU的UART一般是CMOS/TTL电平,空闲状态通常为高;标准RS-232则使用正负电压,而且逻辑极性和TTL UART相反,中间需要专用Transceiver做电平转换。
Analog Devices的RS-232资料专门强调,现代数字系统内部UART不能直接当RS-232接口用。
如果你拿的是USB-RS232线,直接接MCU TX/RX,不只是乱码的问题,还可能让IO承受不该承受的电压。

图1:UART做电平转换以后,高低电平幅度可能和原始侧不同,先确认目标器件门限是否匹配。
如果确定是USB-TTL,再看它到底是3.3V还是5VUSB-TTL也不是只有一种。
以FTDI TTL-232R为例,同一系列就有5V I/O版本和3.3V I/O版本。Datasheet明确区分了两种线缆。
MCU是3.3V供电时,电脑端TX如果直接输出5V,目标IO是不是5V tolerant必须查当前芯片Datasheet,不能默认“数字信号都一样”。
反过来,某些5V逻辑输入对3.3V High是否保证识别,也要看VIH门限。
所以连接之前先量一眼USB转串口TX的空闲高电平,往往比换十次波特率快。

图2:UART一帧由Start、Data和Stop等部分组成,波特率不匹配时采样点会逐渐跑偏。
再看最基础的三件事:共地、交叉、帧格式TTL UART至少要有共同参考地。只接TX和RX、不接GND,在桌面短线环境里有时候还能“神奇地收一点”,但这不是可靠连接。
TX要接对方RX,RX要接对方TX。模块丝印里的TX到底表示“模块输出”还是“目标设备应该接TX”,便宜模块不一定标得很统一,别只看颜色。
然后才轮到Baud Rate、Data Bits、Parity、Stop Bits。最常见是8N1,但项目如果用了9bit、Even Parity或者特殊帧格式,电脑端也要一致。

图3:用示波器直接量一个bit的宽度,可以很快确认实际Baud Rate是不是设定值。

图4:示波器带UART Decode时,可以同时看模拟波形和解码结果,判断乱码到底来自时序还是电平。
真怀疑波特率,直接在示波器上量一个bit不要靠“这个115200好像能看到几个字”来猜。
让MCU持续发0x55或0xAA,这种码型边沿多,最好量。
示波器抓住TX,量一个bit的宽度。115200Bd理论Bit Time大约8.68µs;9600Bd约104.17µs。实际偏差如果已经很大,就去查MCU时钟源、分频器和Baud寄存器。
如果bit宽度没问题,但电脑还是乱码,再看电平幅度、过冲、线缆长度和接地。
UART协议很简单,所以乱码反而更适合按“电气层 → 接线 → 帧格式 → 波特率”这个顺序排。上来只改Baud,有时候只是把真正的问题暂时绕过去。
声明:
本文由凡亿教育整理,转载请注明来源!
投稿/招聘/广告/课程合作/资源置换 请加微信:13237418207

扫码关注










































