SBUS协议 【转】飞控信号SBUS信号解析为PWM信号输出CSDN-专业IT技术社区-登录 【转】SBUS协议:SBUS解析与合成CSDN-专业IT技术社区-登录 【转】STM32 Futaba SBUS协议解析 S.BUS是FUTABA提出的舵机控制总线,全称Serial Bus,别名S-BUS或SBUS,也称 Futaba S.BUS。 S.BUS是一个串行通信协议,也是一个数字串行通信接口(单线),适合与飞控连接。它可以连接很多设备,每个设备通过一个HUB与它相连,得到各自的控制信息。 S.BUS可以传输16个比例通道和2个数字(bool)通道。其硬件上基于RS232协议,采用TTL电平,但高位取反(负逻辑,低电平为“1”,高电平为“0”),通信波特率为100K(不兼容波特率)。 1.2 协议解析 通信接口:USART(TTL) 通信参数:1个起始位+8个数据位+偶校验位+2个停止位,波特率=bit/s,电平逻辑反转。 通信速率:每14ms(模拟模式)或7ms(高速模式)发送,即数据帧间隔为 11ms(模拟模式)或4ms(高速模式)。 数据帧格式:[1] 字节位 byte1 byte2-23 byte24 byte25 类型 开始字节 通道数据字节(含16个脉宽通道) 标志位字节(含2个数字通道) 结束字节 数据 0x0F 通道数据范围11Bits = [0,2047] 2个数字通道位+2个状态位 0x00 byte1: startbyte = 0000 1111b (0x0F) byte2-23: databytes = 22bytes = 22 x 8Bits = 16 x 11Bits(CH1-16) 通道数据低位在前,高位在后,每个数据取11位,具体协议如下: 读取的databyte值: byte 2 3 4 5 6 7 etc 内容 etc 转化后的通道值: 通道 CH01 CH02 CH03 CH04 etc 内容 etc byte24: Bit 7 6 5 4 3 2 1 0 含义 数字通道CH17 数字通道CH18 帧丢失位 故障保护激活位 N/A N/A N/A N/A byte25: endbyte = 0000 0000b (0x00) 2. 硬件设计 2.1 硬件参数 主控芯片:STM32F103VET6 接收端口:USART2(带反相电路) S.BUS设备:walkera RX-SBUS[2](配DEVO 10遥控器) 2.2 反相电路 由于此芯片串口不带反相器,我们需要外部搭建反相电路。如果芯片串口内部带反相器,可以省略此步。反相电路设计如下图: J1为4Pin排针,适配S.BUS接口,可5V输出为SBUS接收机供电。 J1的Pin-4接S.BUS数据发送端,连接一个由NPN三极管构成的反相器,将反相后的信号送入芯片USART2的RXD引脚。 3.程序设计 3.1 数据接收 分析一:根据 1.2 的协议解析,开始字节(0x0F)和结束字节(0x00)都是数据字节中很容易出现的字节,所以不能完全作为数据帧接收开始和结束的标志。 分析二:每个数据帧之间的间隔至少4ms,则可以利用这个空闲时间来接收数据帧。(需要设计一个系统时钟) 分析三:STM32 USART或UART有空闲中断,即检测到总线空闲(无数据传输),就产生中断。 接收程序设计:综上,利用USART2接收中断(RXNE)来接收每个字节,利用USART2空闲中断(IDLE)来判断数据帧是否接收完毕。 USART2 初始化函数代码如下: USART2 中断函数代码如下: USART2_RX_BUF为接收缓存区,定义为26个字节,第一个字节USART2_RX_BUF[0]为接收到的字节个数,后面为接收到的数据。 USART2_RX_BUF[0]可以作为数据帧字节长度的判断。 中断服务函数具体解释请参考STM32 串口接收不定长字节数据。 3.2 数据处理 直接上代码: 接收到的报文和解析出来的数据如下: RX:0F E0 03 1F 58 C0 07 16 B0 80 05 2C 60 01 0B F8 C0 07 00 00 00 00 00 03 00 CH: 992 992 352 992 352 352 352 352 352 352 992 992 000 000 000 000 RX:0F 60 01 0B 58 C0 07 66 30 83 19 7C 60 06 1F F8 C0 07 00 00 00 00 00 03 00 CH: 352 352 352 992 1632 1632 1632 992 1632 992 992 992 000 000 000 000 接收的byte24数据并非和协议解析中的一样,无论断开遥控器还是连接遥控器,读取的值都是0x03。 接收机只支持12个通道,所以通道13-16没有值。 读取的通道值中间值为992,最大值为1632,最小值为352。 4. 最后 提供两个应用优化方向: 使用DMA+双缓存器+串口空闲中断读取和解析数据,提升MCU的工作效率。 将读取的通道值转化成脉宽(0.5-2.5ms)输出,用来控制模拟信号设备。 本协议解析就写到这里。 本解析只提供数据读取和数据解析方法,仅供学习,未经本人同意,不得用于其他任何用途。 Copyright © 2019 Brendon Tan. All rights reserved. 该协议解析参考Futaba S-BUS controlled by mbed[Uwe Gartmann,Created 07 Mar 2012,Last updated 09 Mar 2012] ↩︎ 某猫链接walkera RX-SBUS[Copied May 2012] ↩︎ 【转】stm32对S-BUS协议解析 最近搞了一段时间嵌入式,深觉行行不容易 。。。。。第一次接触S-BUS协议,踩了好多坑,在此记录一下。本人用的是stm32F429 + 普通航模遥控器(某宝上一大堆),用来遥控机器人小车,管脚自定义。 S-BUS协议 S-BUS其实是一种串口通信协议,采用的波特率,数据位点8bits,停止位点2bits,偶效验,即8E2的串口通信。但是S-BUS采用的是反向电平传输,也就是说,在S-BUS的发送端高低电平是反向的,协议中的所有高电平都被转换成低电平,协议中的所有低电平都被转换成高电平。所以在S-BUS的接收端需要增加一个高低电平反向器来进行电平反转。附上网上最流行的反相电路(可以自己买一个反相模块,3RMB左右)
PS:一定要硬件取反,软件没用。我也不知道为什么╮(╯▽╰)╭ 需要注意的是S-BUS中用11bits来表示一个遥控器通道的数值,22个字节就可以表示16通道(8 × 22 = 11 ×16)。11个bit可以表示的数值范围为0~2047。每帧25个字节,排列如下: [start byte] [data0] [data1] [data2] [data3] … [data10] [flag] [end byte] 附上网上最流行的解说图,简单来说就是start byte = 0x0FCH1 = [data0]的8位 + [data1]的低3位CH2 = [data1]的高5位 + [data2]的低6位… …end byte = 0x00以此类推,如果还没明白可以参见视频,小姐姐讲的很明白呢!
stm32解析S-BUS协议 利用stm32开发板解析S-BUS协议最重要有两点: 串口配置为波特率,8位数据位(stm32编程选9位),2位停止位,无硬件流控对收到的25字节数据解码(包括数据头0x0F) !!友情提示!! 在查看收发数据的过程中,建议调式查看(从内存查看),本人利用串口调试助手查看了好久,结果五花八门,以为自己写错了,结果。。。。。所以,强烈建议直接查看内存数据! [参考链接]简书简书简书简书简书 作者:有事没事扯扯淡链接:https://www.sigusoft.com/p/23a8b7dd362e来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/81045.html