单片机连蓝牙模块、GPS模块,或者做调试输出,用的基本都是UART。串口助手里一屏乱码,或者发了数据对方没反应,九成出在下面这几件事上。

原理:异步,靠约定对齐

UART没有时钟线,两边各自按约定的速度收发。发送方把一个字节拆成一位一位,加上起始位和停止位打包发出,接收方按同样的节奏逐位采样还原。常见格式是8N1:8个数据位、无校验位、1个停止位,串口助手里那一排下拉框,对应的就是这些参数。

串口助手的设置面板一般就这几项:端口号选对,波特率两边一致,数据位8,停止位1,校验无,流控关。新手最常见的错误是把流控勾上了,设备一直等握手信号,什么都发不出来。端口号在设备管理器里看,插拔一次USB转TTL,多出来的那个COM口就是它。

接线:三根线,必须交叉

  • 本机的TX接对方的RX,本机的RX接对方的TX,直连等于自说自话,谁也收不到
  • GND必须共地,不共地电平就没有统一参考点,数据全是垃圾
  • 只接这三根就够,有的模块带CTS、RTS流控脚,不用就悬空,或者在配置里把流控关掉

乱码排查顺序

先对波特率,最常用的是9600和115200,模块手册上写得明明白白。波特率也不是随便定的,两边误差超过百分之二左右就容易出错,改了一头的波特率,另一头要同步改。再查共地,面包板搭的电路最容易漏这一步。然后确认电平:3.3V设备和5V设备直连,轻则乱码,重则烧IO脚;RS232的电平是正负十几伏,跟单片机的TTL完全两码事,别拿电脑串口直接怼单片机。

调试建议备一个USB转TTL小模块,几块钱。先让它的TX和RX短接自环,串口助手能收到自己发的内容,说明电脑这头没问题,再去找模块的毛病。uart串口通信本身不难,难的是排查时候的细心和顺序,抓不到头绪时换根线再试,串口线接触不良的坑并不少见。