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;
//12通道遥控器代码
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一帧数据;