1. 程式人生 > >STM32 解析futaba S-bus協議

STM32 解析futaba S-bus協議

技術分享 mbed 9.png 協議 bsp ont play logs 大端小端

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協議