Futaba SBUS协议解析

本文详细介绍了Futaba SBUS串行通信协议的技术细节,包括串口配置参数、帧格式、数据通道表示方式及标志位含义等关键信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Futaba SBUS协议解析

S-bus为futaba使用的串行通信协议。实际上为串口通信。但是有几点需要注意:
  1. 在大端小端上,网上资料都说的不是很清楚;
  2. 跟TTL串口信号相比,S-bus的逻辑电平是反的,需用如下电路对电平反相,再借到串口接收的Rx管脚就可以了;

1.png


一、协议说明:

串口配置为波特率100kbps( 100000 ),8位数据,偶校验(even),2位停止位,无流控。
链接 https://mbed.org/users/Digixx/ ... mbed/说明了S-bus帧格式。
每帧25个字节,按照如下顺序排列:

[startbyte] [data1] [data2] .... [data22] [flags][endbyte]

起始字节startbyte = 11110000b (0xF0),但实际上用STM32(据说ARM核)收到的是0x0F。中间22个字节就是16个通道的数据了,为什么是16个通道?因为22x8=11x16,每个通道用11bit表示,范围是0-2047。

两帧之间的时间间隔4ms(高速模式),约7ms一帧。

2.png


3.png


4.png


5.png


6.png


7.png


基本而言,data1为ch1的低8位,data2的低3位为ch1的高三位,data2的高5位是ch2的低5位,data3的低6位是ch2的高6位,以此类推,如下图所示:

flags的结构如下所示:

flags:

bit7 = ch17 = digital channel (0x80)
bit6 = ch18 = digital channel (0x40)
bit5 = Frame lost, equivalent red LED on receiver (0x20)
bit4 = failsafe activated (0x10)
bit3 = n/a
bit2 = n/a
bit1 = n/a
bit0 = n/a

endbyte为0x04 0x14 0x24 0x34 循环。

头 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 fg 尾
0F 00 34 1F A8 09 08 6A 50 03 10 80 00 04 20 00 01 08 07 38 00 10 80 00 04
0F 00 34 1F A8 09 08 6A 50 03 10 80 00 04 20 00 01 08 07 38 00 10 80 00 14
0F 00 34 1F A8 09 08 6A 50 03 10 80 00 04 20 00 01 08 07 38 00 10 80 00 24
0F 00 34 1F A8 09 08 6A 50 03 10 80 00 04 20 00 01 08 07 38 00 10 80 00 34
0F 00 34 1F A8 09 08 6A 50 03 10 80 00 04 20 00 01 08 07 38 00 10 80 00 04
0F 00 34 1F A8 09 08 6A 50 03 10 80 00 04 20 00 01 08 07 38 00 10 80 00 14
0F 00 34 1F A8 09 08 6A 50 03 10 80 00 04 20 00 01 08 07 38 00 10 80 00 24
0F 00 34 1F A8 09 08 6A 50 03 10 80 00 04 20 00 01 08 07 38 00 10 80 00 34
0F 00 34 1F A8 09 08 6A 50 03 10 80 00 04 20 00 01 08 07 38 00 10 80 00 04
0F 00 34 1F A8 09 08 6A 50 03 10 80 00 04 20 00 01 08 07 38 00 10 80 00 14
0F 00 34 1F A8 09 08 6A 50 03 10 80 00 04 20 00 01 08 07 38 00 10 80 00 24
### STM32 中 SBUS 协议工作原理 SBUS 是一种由 Futaba 开发的串行总线通信协议,用于无线遥控设备与接收器之间的数据传输。该协议采用单向、半双工模式,在接收机和飞行控制器间传递控制信号。 #### 数据帧结构 每帧 SBUS 数据包含 25 字节的信息,其中前 22 字节表示 16 个通道的状态值(每个通道占用 11 比特),剩余字节则用来校验以及标志位[^1]。 ```plaintext | Start Byte | Ch1-8 Data (11 bits each) | Ch9-16 Data (11 bits each) | Flags & Checksum | ``` 为了确保数据准确性,发送端会在每一帧结束处附加一个奇偶校验码来验证接收到的数据完整性。 ### 实现方法概述 当使用 STM32 处理 SBUS 流量时,通常会涉及到以下几个方面: - **UART 接口配置**:设置 UART 工作参数以匹配 SBUS 的波特率和其他特性。 - **硬件取反电路应用**:由于 SBUS 使用的是负逻辑电平标准,因此在实际连接中往往需要通过外部电路对信号进行反转处理[^3]。 - **中断服务程序编写**:每当检测到新的 SBUS 帧到达时触发相应的 ISR 来读取并解析这些信息。 - **定时器管理**:考虑到 SBUS 定义了一定的时间间隔内必须更新一次完整的状态集,所以还需要利用定时器功能监控超时情况。 具体来说,在初始化阶段应该完成如下操作: ```c // 配置 USART 初始化结构体 USART_InitTypeDef usart_init_struct; usart_init_struct.BaudRate = 100000; // 设置波特率为 100kbps usart_init_struct.WordLength = USART_WordLength_8b; usart_init_struct.StopBits = USART_StopBits_2; usart_init_struct.Parity = USART_Parity_No; usart_init_struct.Mode = USART_Mode_Rx; // 调用 HAL 库函数启动外设 HAL_UART_Init(&huart, &usart_init_struct); ``` 对于硬件取反部分,则可以参照提供的电路设计指南构建合适的接口板卡。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值