生活随笔
收集整理的這篇文章主要介紹了
SBUS协议
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
SBUS
1.串口配置:
100k波特率,
8位數據位(在stm32中要選擇9位),
偶校驗(EVEN),
2位停止位,
無控流,25個字節,
2.協議格式:(8字節)
[startbyte] [data1][data2]…[data22] [flags] [endbyte]
startbyte=0x0f;
endbyte=0x00;
flags標志位我沒有用到;
data1…data22:對應16個通道(ch1-ch16),每個通道11bit(228=1611=176);
數據范圍在0-2047之間,基本上是1102~1927,中值為1500;ch1的11位=data2的低3位+data1的8位;
例如:data1=00110110,data2=11001111;
這時ch1=111 00110110=1846;通道1 的值就為1846;
ch2=data3的低6位+data2的高5位;
ch3=data5的低1位+data4的8位+data3的高2位;
ch4=4 7;
ch5=7 4;
ch6=2 8 1;
ch7=5 6;
ch8=8 3;
ch9=6 5;
ch10=1 8 2;
ch11=4 7;
ch12=7 4;
ch13=2 8 1;
ch14=5 6;
ch15=8 3;
ch16=6 5;
rc
->ch1
= (buff
[2]<<8 | buff
[1] ) & 0x07FF;rc
->ch1
-= 1002;rc
->ch2
= (buff
[2]>>3 | buff
[3]<<5 ) & 0x07FF;rc
->ch2
-= 1002;rc
->ch3
= (buff
[3]>>6 | buff
[4]<<2 | buff
[5]<<10) & 0x07FF;rc
->ch3
-= 1002;rc
->ch4
= (buff
[5]>>1 | buff
[6]<<7) & 0x07FF; rc
->ch4
-= 1002;rc
->switch_E
= (buff
[6]>>4 | buff
[7]<<4 ) & 0x07FF;rc
->switch_E
= (rc
->switch_E
-20 ) /100;rc
->switch_G
= (buff
[9]<<9 | buff
[8]<<1 | buff
[8]>>7) & 0x07FF ;rc
->switch_G
= (rc
->switch_G
-20 ) /100;rc
->switch_H
= (buff
[9]>>2 | buff
[10]<<6) & 0x07FF;rc
->switch_H
=(rc
->switch_H
-20)/100;rc
->switch_F
=(buff
[11]<<3 | buff
[10]>>7) & 0x07FF ;rc
->switch_F
=(rc
->switch_F
-20)/100;rc
->Key
.A
= ( buff
[12] <<5 | buff
[11] >> 3 ) & 0x07FF ; rc
->Key
.A
/=1600;rc
->Key
.B
= ( buff
[14] <<10 | buff
[13] << 2 | buff
[12] >>6 ) & 0x07FF ;rc
->Key
.B
/=1600;rc
->Key
.C
= ( buff
[15] <<7 | buff
[14] >> 1 ) & 0x07FF ;rc
->Key
.C
/=1600;rc
->Key
.D
= ( buff
[16] <<4 | buff
[14] >> 4 ) & 0x07FF ;rc
->Key
.D
/=1600;
3.硬件電路;
4.控制頻率(兩種模式)
- 高速模式:每隔7ms一幀數據,因為兩幀的間隔只有超過3ms,才會被接受;而根據波特率計算一下,發送25字節需要的時間+3~4ms=7ms
- 普通模式:每隔14ms一幀數據;
總結
以上是生活随笔為你收集整理的SBUS协议的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。