sbus通道定义,sbus和mbus

1、概要SBUS、全名Serial Bus,即串行通信总线。 本质上是串行通信协议,100K的波特率、8位的数据位、2位的停止位,正好有效,即采用8E2的串行通信。

2、串口配置100k波特率、8位数据位(stm32选择9位)、偶数校验(EVEN )、2位停止位、无控流、25字节。

3、协议格式[ start byte ] [ data1 ] [ data2]…[ data 22 ] [ flags ] [ end byte ]

startbyte=0x0f;

endbyte=0x00;

flags标志位是用于检测控制器是否已与px4断开连接的标志位。

flags=1:保持控制器和接收器的连接;

flags=0:当控制器和接收器断开(失控)时,px4控制电机停止。

data1…data22:对应于16个信道(ch1-ch16 ),并且每信道11比特(22×8=16×11=176 )

数据范围在0-2047之间,基本在282~1722,中间值为1002;

ch111比特=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=1 8;

ch10=4 7;

ch11=7 4;

ch12=2 8 1;

ch13=5 6;

ch14=8 3;

ch15=3 8;

ch16=8 5;

4、反方用stm32向px4发送问题时,需要反方,是硬件的反方,软件的反方无效; 硬件相反的电路图如下。

5、间隔问题它可以分为两种模式:高速模式和普通模式

高速模式:每7ms一帧的数据。 因为两帧的间隔不超过3ms是不能接受的;

根据波特率计算,25字节发送所需的时间为3~4ms=7ms

正常模式:每14ms一帧数据;

6、分析和合并数据# include ‘ sbus.h ‘ # include ‘ bsp _ usar t1.h ‘ # include ‘ string.h ‘ uint 16 _ tvalues [ 16 ]={0} void sbus _ out (uint 16 _ tnum _ values ) {int i=0; uint16_t value=0; uint8_t byteindex=1; uint8_t offset=0; uint8_t oframe[25]={ 0 }; memset(oframe,0,25 ); oframe[0]=0x0f; oframe[24]=0x00; for(I=0; (i num_values ) ) i 16; I ) value=(unsignedshort ) ) (values[i] – SBUS_SCALE_OFFSET )/SBUS_SCALE_FACTOR ).5f ); if(value0x07ff ) {value=0x07ff; }while(offset=8) { byteindex; 偏移-=8; } of rame [ byte index ]|=(value (offset ) )0xff; of rame [ byte index1]|=(value (8- offset ) )0xff; of rame [ byte index2]|=(value (16-offset ) )0xff; offset =11; (for ) I=0; i25; I ) while(usart_getflagstatus ) usarT1,USART_FLAG_TC )==RESET; usart_senddata(usarT1,(uint16_t ) oframe[i]; } void sbus _ decode (unsigned char * frame ) {unsigned int pick=0,channel=0,value1=0,piece=0; conststructsbus _ bit _ pick * decode; for (信道=0; 信道16信道(value1=0; for (挑库=0; pick 3; pick ({ decode=sbus _ decoder [ channel ] [ pick ]; if (解码掩码!=0) {piece=frame[1 decode-byte]; piece=decode-rshift; piece=decode-mask; piece=decode-lshift; piece=0x07ff; value1 |=piece; }values[channel]=(uint16_t ) value1 * SBUS_SCALE_FACTOR .5f ) SBUS_SCALE_OFFSET; if(channel==1) values [ channel ]=3029-values [ channel ]; }}合成函数:

void sbus _ out (uint 16 _ tnum _ values;

//参数是通道数;

values[16]是所对应的16个信道;

分析函数:

void sbus _ decode (unsigned char * frame );

//frame是25个u8位数据

请参阅伟大人物文章的链接:

3359 blog.csdn.net/uunubt/article/details/101712492? UTM _ medium=distribute.PC _ relevant.none-task-blog-Baidu js _ baidulandingword-0 SPM=1001.21001.3001.3001.401

3359 blog.csdn.net/uunubt/article/details/101712492? UTM _ medium=distribute.PC _ relevant.none-task-blog-Baidu js _ baidulandingword-0 SPM=1001.21001.3001.3001.401

安装nvidia驱动程序时仅显示扩展屏幕,卸载nvidia驱动程序时仅显示主屏幕。 这两个不能并存。 2小时正在安装驱动程序解决显示问题。 如果不完全的话,有时也会不完全吧。 不是所有的东西都能很好地解决。 既然解决不了,为什么不调整一下心情做点别的呢?

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注