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)
bit3 = n/a
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 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
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协议的更多相关文章
- stm32 解析sbus
转载 https://blog.csdn.net/Brendon_Tan/article/details/89854751 STM32 Futaba SBUS协议解析1. S.BUS1.1 协议介绍 ...
- wireshark解析自定义的protobuf协议
先看最终效果 wireshark是开源的,而且在Windows下安装时用的是64位,所以相应的库文件需要使用64位. 一个Lua插件的Dissector结构大致如下: do -- 协议名称为 m_Me ...
- 2.爬虫 urlib库讲解 异常处理、URL解析、分析Robots协议
1.异常处理 URLError类来自urllib库的error模块,它继承自OSError类,是error异常模块的基类,由request模块产生的异常都可以通过这个类来处理. from urllib ...
- STM32 Bootloader基于ymodem传输协议串口IAP升级详解
硬件:stm32f103cbt6 软件:STM32F10x_StdPeriph_Lib_V3.5.0 文章目录 1 预备知识 2 Bootloader 2.1 启动流程 2.2 校验跳转地址是否有效 ...
- stm32与红外遥控器(NEC协议)
1.器件简介 本次测试采用R903V1红外接收头与NEC协议的红外遥控器,接收头原理图如下: 器件的供电电压VCC在2.7V~5.5V之间,输出电压VOUT正常在0.2v ~(VCC-0.3±0.2) ...
- RS-232-C串口通讯协议解析(硬件接口协议)
http://www.dz3w.com/info/interface/0075524.html http://wenku.baidu.com/view/02cc247c27284b73f24250e3 ...
- 怎样从Cortex-m向STM32移植使用SPI接口协议
/*************************************************************************************************** ...
- UDP协议解析 以及和TCP协议的区别
UDP(User Data Protocol)是传输层的用户数据报协议,有复用和分用以及差错检测的功能. 1) 多路复用(针对发送主机):从不同套接字收集数据块,并为每个数据块封装上首部信息,生成报文 ...
- MQTT 嵌入式端通讯协议解析(转)
MQTT,目前物联网的最主要的协议,基本所有收费的云平台都是基于MQTT协议,比如机智云,和所有的开放云平台比如中国移动的oneNet.百度的云平台也都支持MQTT的接入.虽然MQTT很火,但是目前对 ...
随机推荐
- leetcode-两个数组交集(包含重复元素)
Python解法代码: class Solution: def intersect(self, nums1: List[int], nums2: List[int]) -> List[int]: ...
- 线程池 一 ScheduledThreadPoolExecutor
java.util.concurrent public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ...
- TopCoder[TCO2016 Round 1A]:EllysTree(1000)
Problem Statement Elly has a graph with N+1 vertices, conveniently numbered from 0 to N. The gr ...
- Optimal Marks SPOJ - OPTM
传送门 一个无向图,每个点有点权,某些点点权确定了,某些点由你来确定,边权为两个点的异或和,要使边权和最小. 这不是一道按位做最小割的大水题么 非常开心地打了,还非常开心地以为有spj,然后非常开心地 ...
- 一句话下载总结(用于后渗透上传payload)
利用ftp来下载payload文件 echo open 192.168.1.1 21> ftp.txt echo ftp>> ftp.txt echo bin >> ft ...
- NX二次开发-UFUN创建球UF_MODL_create_sphere1
NX11+VS2013 #include <uf.h> #include <uf_modl.h> UF_initialize(); //创建球 UF_FEATURE_SIGN ...
- 在 input 的 placeholder中 使用iconfont
写在前面 产品要求放大镜和文字放在一起.用定位,位置不准确,就会导致手机上错位,丑的一批. 进入正题 如何在input的 placeholder 中使用图标呢? 以阿里巴巴的矢量图标库为例, 现在有三 ...
- Linux环境上的图形化界面SVN客户端软件“RabbitVCS”
RabbitVCS基本支持所有的Linux发行版本包括ubuntu.Debian.Fedora.Arch Linux.Gentoo.Mandriva.OpenSUSE.RHEL.CentOS 5等.其 ...
- 接口(Interfaces)与反射(reflection) 如何利用字符串驱动不同的事件 动态地导入函数、模块
标准库内部如何实现接口的 package main import ( "fmt" "io" "net/http" "os" ...
- Mysql 插入数据,随机事件选择
在拼写sql的 时候,mysql字段如果需要添加当前时间可以用NOW() 函数 // String sql = ("insert into tablename(content, create ...