STM32 解析futaba S-bus协议

Posted QIYUEXIN

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 解析futaba S-bus协议相关的知识,希望对你有一定的参考价值。

S-bus为futaba使用的串行通信协议。实际上为串口通信。但是有几点需要注意:

  • 在大端小端上,网上资料都说的不是很清楚;
  • 跟TTL串口信号相比,S-bus的逻辑电平是反的,需用如下电路对电平反相,再借到串口接收的Rx管脚就可以了

 

一、协议说明:串口配置为波特率100kbps,8位数据,偶校验(even),2位停止位,无流控。

链接https://mbed.org/users/Digixx/notebook/futaba-s-bus-controlled-by-mbed/说明了S-bus帧格式。

每帧25个字节,按照如下顺序排列: [startbyte] [data1] [data2] .... [data22] [flags][endbyte]

起始字节startbyte = 11110000b (0xF0),但实际上用STM32(据说ARM核)收到的是0x0F。

中间22个字节就是16个通道的数据了,为什么是16个通道?因为22x8=11x16,每个通道用11bit表示,范围是0-2047。

 

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为0x00。

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 解析futaba S-bus协议的主要内容,如果未能解决你的问题,请参考以下文章

stm32为啥都用软件模拟协议

STM32怎么编写一个串口通信协议

STM32学习笔记(15)——SPI协议

stm32串口接收完整的数据包

基于STM32单片机的LwIP协议LwIP 的TCP_client 上传数据温度电压数据到网络调试助手

基于STM32单片机的LwIP协议LwIP 的TCP_client 上传数据温度电压数据到网络调试助手