Futaba SBUS协议解析

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
  • 8
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
SBUS是一种串行总线通信协议,用于无人机和遥控器之间的数字信号传输。SBUSFutaba公司开发的一种数字通信协议,可以通过单根信号线传输16个通道的数据,同时还可以传输其他的控制信息。 STM32是一种单片机,可以通过编程实现对SBUS信号的解析。以下是STM32解析SBUS的步骤: 1. 配置串口 首先需要选择一个可用的串口,并将其配置为接收模式。在STM32中,可以使用USART或UART模块实现串口通信。需要设置串口的波特率、数据位数、停止位数和校验位等参数。 2. 接收数据 配置好串口后,可以通过读取串口接收缓冲区中的数据来接收SBUS信号。SBUS信号以帧的形式传输,每一帧的长度为25个字节。读取串口缓冲区中的数据,并判断接收到的数据是否为完整的一帧,如果是,则进行下一步处理。 3. 解析数据 接收到完整的一帧数据后,需要对其中的数据进行解析SBUS信号的第一字节为0x0F,用于标识这是一帧SBUS数据。接下来的16个字节分别对应16个通道的数据,每个通道的数据占用11位,最高位为标识位。还有两个字节分别用于标识数字信号的状态和传输错误的计数。 4. 处理数据 解析出每个通道的数据后,可以根据需要进行相应的处理,比如将数据转换为实际控制量,或者存储到数组中以备后续使用。 5. 发送数据 如果需要将处理后的数据发送到其他设备,则需要将数据通过串口发送出去。发送数据的方法与接收数据的方法类似,只是需要将数据写入串口发送缓冲区中。 以上就是STM32解析SBUS信号的基本步骤,需要对串口通信和数据解析有一定的了解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值