SBUS(Serial Bus)作为无人机主流的数字控制协议,具有抗干扰强、通道数多(16 通道)、延迟低(10ms 周期)等优势,广泛应用于中高端遥控器与飞控的通信。本文基于 STM32F103 单片机,从硬件接口设计、软件开发原理到完整代码实现,详细讲解如何从零构建 SBUS 接收与解析系统,适合新手入门实践。
一、SBUS 协议核心特性(开发前必知)
在设计前,需先明确 SBUS 的底层特性,避免硬件与软件设计偏差:
- 信号类型:串行数字信号,采用反向电平逻辑(标准 UART:高电平为 1,低电平为 0;SBUS:高电平为 0,低电平为 1)。
- 波特率:100kbps(固定值,不可修改)。
- 帧结构:每帧 25 字节,包含 16 通道数据(每个通道 11 位,范围 0-2047),格式如下:
plaintext
-
[起始字节(0x0F)] + [22字节通道数据] + [标志位(1字节)] + [结束字节(0x00或0x7E)] - 刷新频率:100Hz(每 10ms 发送一帧,比 PPM 快 1 倍)。
- 电气标准:3.3V 电平,支持差分传输(抗干扰)。
二、硬件接口设计:STM32 与 SBUS 设备的连接
STM32F103 的 UART 接口默认使用标准电平逻辑(高电平 1,低电平 0),而 SBUS 为反向电平,因此硬件设计的核心是电平反向转换,同时需考虑抗干扰与接口保护。
1. 核心电路:电平反向转换
SBUS 信号需经过反向处理才能被 STM32 的 UART 正确识别,常用两种方案:
方案 1:三极管反向电路(低成本)
采用 NPN 三极管(如 2N3904)实现电平反向,电路简单,成本 < 1 元:
- 电路连接:
- SBUS 输入信号 → 三极管基极(串联 1kΩ 限流电阻)。
- 三极管集电极 → 3.3V(串联 10kΩ 上拉电阻)。
- 三极管发射极 → GND。
- 集电极输出 → STM32 的 UART_RX(如 PA3,USART2_RX)。
- 原理:SBUS 低电平(逻辑 1)时,三极管导通,集电极输出低电平(STM32 逻辑 0);SBUS 高电平(逻辑 0)时,三极管截止,集电极输出高电平(STM32 逻辑 1),实现反向。
方案 2:专用反相器(高可靠性)
使用 74HC14(六反相施密特触发器),适合电磁干扰强的场景(如无人机电机附近):
- 电路连接:
- SBUS 输入 → 74HC14 的 1 脚(A1)。
- 74HC14 的 2 脚(Y1) → STM32 的 UART_RX。
- 74HC14 的 VCC → 3.3V,GND → GND。
- 优势:施密特触发器可过滤高频噪声,输入电压范围宽(2-6V),稳定性优于三极管方案。
2. 抗干扰设计(关键细节)
- 电源滤波:在 STM32 和反相器的 3.3V 供电端并联 100nF 陶瓷电容(靠近芯片引脚),滤除电源噪声。
- 屏蔽布线:SBUS 信号线使用带屏蔽层的导线(如同轴电缆),屏蔽层单端接地(STM32 侧 GND)。
- 接口保护:在 SBUS 输入端串联 100Ω 电阻 + TVS 管(如 SMBJ3.3A),防止静电或过压损坏芯片。
3. 硬件接口定义(以 STM32F103C8T6 为例)
| STM32 引脚 | 功能 | 连接对象 | 备注 |
|---|---|---|---|
| PA3 | USART2_RX | 反相器输出(SBUS 信号) | 接收 SBUS 数据 |
| PA2 | USART2_TX | 调试串口(可选) | 输出解析后的通道数据 |
| 3.3V | 电源 | 反相器、接收机(若需要) | 最大电流≤50mA |
| GND | 地 | 反相器、接收机地 | 共地设计,避免地电位差 |
三、软件开发原理:从数据接收到通道解析
SBUS 软件开发的核心流程是:UART 接收反向处理后的信号 → 识别帧边界(起始 / 结束字节) → 解析 22 字节通道数据 → 提取 16 通道的 11 位值。
1. 数据接收:UART 配置与中断处理
- UART 参数:
- 波特率:100000bps(必须严格匹配)。
- 数据位:8 位。

最低0.47元/天 解锁文章
5585

被折叠的 条评论
为什么被折叠?



