2、串口通信基础:UART协议原理、波特率与帧格式、RS232与RS485对比

好,咱们进入第二个章节。串口通信,说白了就是无人机地面站和飞控之间最古老、也最可靠的那条「脐带」。你想想看,飞控在天上飞,地面站在地上控,它们之间怎么说话?

我最早做无人机那会儿,用的就是串口。那时候WiFi模块还贵得要死,数传电台动不动就丢包。反而是最简单的串口,一根线,两根线,稳稳当当传数据。嗯,这里要注意,串口通信虽然看起来简单,但坑其实不少。今天我就把压箱底的经验翻出来,跟你好好聊聊。

2.1 UART协议原理:说白了就是「异步聊天」

UART的全称是Universal Asynchronous Receiver/Transmitter,通用异步收发器。异步是什么意思?就是没有时钟线。不像SPI和I2C,还得专门拉一根时钟线来同步。UART就两根数据线:TX(发送)和RX(接收),交叉连接就完事了。

我习惯把UART比作两个人隔空喊话。没有时钟线,那就得提前约定好:说话速度多快(波特率),一句话几个字(数据位),有没有校验(奇偶校验),说完怎么结束(停止位)。这些约定,就是帧格式。

UART的传输过程,其实就三步:

  1. 空闲状态:线上保持高电平。没有数据时,线就是「闲」着的。
  2. 起始位:要发数据了,先把电平拉低一个位的时间。这相当于喊一声「注意,我要说话了!」
  3. 数据位 + 校验位 + 停止位:按顺序把数据发出去,最后拉高电平表示「我说完了」。

我在项目中遇到过一个问题:飞控和地面站明明波特率都设成了115200,但就是收不到数据。查了半天,发现是晶振精度不够,两边的时间基准差了那么一点点。时间长了,累积误差就把数据吞掉了。所以啊,UART虽然简单,但对时钟精度是有要求的。

⚠️ 我曾经踩过的坑: 飞控和地面站之间的UART通信,如果距离超过1米,建议降低波特率。9600波特率下,5米线长都没问题;115200的话,超过2米就开始丢数据了。别问我怎么知道的,问就是焊过十几根线。

2.2 波特率与帧格式:速度与格式的约定

波特率,就是每秒传输的符号数。对于UART来说,一个符号就是一个bit。所以波特率就等于比特率。常见的波特率有:9600、19200、38400、57600、115200。

我个人习惯,无人机地面站和飞控之间,如果距离近(1米以内),用115200;如果距离远或者环境干扰大,降到57600甚至38400。别一味追求高速,稳定才是王道。

帧格式,就是数据包的「包装方式」。一个标准的UART帧包含:

字段 长度 说明
起始位 1 bit 固定为0(低电平)
数据位 5~9 bit 常用8 bit,正好一个字节
校验位 0或1 bit 奇校验、偶校验、或无校验
停止位 1、1.5或2 bit 固定为1(高电平)

举个例子,最常用的配置是:115200波特率,8数据位,无校验,1停止位。简写为115200-8-N-1。你在地面站软件里看到的配置界面,基本就是这个套路。

为什么会这样配置?8位数据位刚好对应一个字节,无校验省去了校验位的开销,1位停止位足够。说白了,这是效率和可靠性的平衡点。

💡 小技巧: 如果你用STM32做飞控,配置UART时记得检查一下USART的时钟源。我遇到过有人把APB1和APB2的时钟搞混了,结果算出来的波特率死活不对。用CubeMX生成代码时,最好手动确认一下时钟树。

2.3 RS232与RS485对比:电平标准的选择

UART协议是逻辑层面的,而RS232和RS485是物理层面的。说白了,UART定义了数据怎么「组织」,RS232和RS485定义了数据怎么「传输」。

RS232: 这是最古老的串口标准。用正负电压表示逻辑0和1。逻辑1是-3V~-15V,逻辑0是+3V~+15V。特点是:

  • 传输距离短,一般不超过15米
  • 抗干扰能力一般
  • 只能点对点通信(一个发,一个收)
  • 电平范围大,容易损坏芯片

RS485: 这是工业现场最常用的标准。用差分信号传输,两根线(A和B)的电压差来表示逻辑。特点是:

  • 传输距离远,可达1200米
  • 抗干扰能力强(差分信号的优势)
  • 支持多点通信(一条总线上可以挂多个设备)
  • 电平范围小,对芯片友好

我建议,无人机地面站和飞控之间,如果距离在10米以内,用RS232转TTL电平就行,简单便宜。如果距离超过10米,或者现场有电机、变频器等强干扰源,果断上RS485。

你想想看,飞控在天上飞,地面站可能放在几十米外的帐篷里。中间还有电机在转,电磁环境复杂得很。RS232在这种场景下,分分钟被干扰得数据全乱。RS485就不一样了,差分信号天生抗共模干扰,稳得很。

对比项 RS232 RS485
传输方式 单端信号 差分信号
最大距离 约15米 约1200米
最大节点数 2(点对点) 32(标准),可扩展
抗干扰能力
电平范围 ±3V~±15V ±1.5V~±6V
典型应用 调试、短距离通信 工业现场、长距离通信
🔑 核心结论: 无人机地面站和飞控之间的串口通信,近距离调试用RS232转TTL,远距离或强干扰环境用RS485。不要试图用RS232去跑几十米的线,那是给自己找麻烦。

2.4 实际项目中的选择建议

好了,理论说完了,咱们来点实际的。如果你现在要设计一个无人机地面站和飞控的通信链路,我的建议是这样的:

  1. 调试阶段:直接用USB转TTL模块,接飞控的UART口。波特率设115200,8-N-1。简单粗暴,能跑就行。
  2. 原型验证:如果地面站和飞控距离在5米以内,用RS232转TTL。注意加一个MAX232芯片做电平转换,别直接把TTL电平怼到RS232接口上。
  3. 正式产品:如果距离超过10米,或者现场有电机干扰,用RS485。推荐用SP3485或MAX485芯片,便宜又好买。记得在A、B线上加120欧姆的终端电阻,防止信号反射。

我曾经在一个农业无人机项目上吃过亏。地面站放在田边的车上,飞控在天上飞,距离大概50米。我图省事用了RS232,结果数据丢包率高达30%。后来换成RS485,丢包率直接降到0.1%以下。嗯,从那以后,我对RS485就特别有好感。

⚠️ 避坑指南: RS485总线上的设备,如果超过2个,一定要做地址分配。我曾经见过有人把两个飞控的RS485地址都设成0x01,结果地面站一广播,两个飞控同时响应,数据全乱套了。地址分配,这是基本功,别偷懒。

最后说一句,串口通信虽然看起来「老土」,但它是无人机通信的基石。你想想看,现在的数传电台、4G模块、甚至WiFi模块,底层很多还是用UART和MCU通信的。把串口吃透了,后面的通信协议设计才能游刃有余。

下一章,咱们聊聊更高级的通信协议——MAVLink。那是无人机领域的「通用语言」,学会了它,你就能让飞控和地面站无障碍交流了。