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