Futaba(日本双叶电子工业,戏称“扶他爸”)的遥控器用航模中使用较为广泛的遥控器。S.Bus则是Futaba公司提出的舵机控制总线。本篇博文主要以T6K为对象,介绍STM32与S.Bus协议的遥控器进行通讯的实例。

图1 Futaba T6K-V2

1、硬件电路

硬件上,它基于RS232协议,但高位取反(低电平表示1;高电平表示0),即信号反相。SBUS采用负逻辑,所以无论接收还是发送都要进行硬件取反(注意,一定要硬件取反),下图是带隔离的S.Bus接收信号电路:

图 2 信号取反隔离电路

2、遥控接收机设置

Futaba T6K-V2配备的信号接收机为R3006SB。主控制器与遥控接收机的6通道进行连接,见下图,注意:黄红黑分别为信号、电源正极、电源负极。

图 3 遥控接收机与主控板的链接

Futaba R3006SB有Mode A和Mode B两种输出模式。其区别见图 4,在Mode A模式下,通道6输出PWM信号;在Mode B下通道6输出S.Bus信号。

图 4 R3006SB的输出模式

Futaba R3006SB有Mode A和Mode B两种输出模式的相互切换非常简单。操作步骤如下:

  1. 在遥控关闭的状态下,给接收机供电,接收机上电后接收机的红灯会闪3下,然后变成固定的红灯常亮;
  2. 用工具长按SW按键超过5秒,直到LED灯红、绿快速交替闪烁时松开,此时接收机进入通道设置模式;

图 5 R3006SB模式切换按钮

  1. 此时LED红灯闪烁的规律即为当前所设置的模式:Mode A下每间隔一段时间红灯闪一次;Mode B下每间隔一段时间红灯闪两次。
  2. 如果需要切换通道输出模式,则用工具按一下SW按钮即切换Mode A或Mode B;
  3. 最后,再用工具戳SW按键超过2秒,直到LED灯红、绿快速交替闪烁时松开,此时通道模式即已配置完成;
  4. 重新给接收机上电即可。

3、通讯程序

S.Bus支持16个比例+2个布尔共18个通道 。S-BUS的协议由25个字节构成,更新率为14ms(模拟)或7ms(高速模式),波特率100kbps。

3.1 初始化

在这里,使用STM32的USART2作为与遥控器接收机通讯的串口端口,按RS232正常配置即可,另外,需要注意SBUS要求波特率为100k。

void sbus_init(u32 bound)//SBUS波特率要求100K
{GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);//USART2_TX   PA.2GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);//USART2_RX     PA.3GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA.3GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);  //NVIC配置NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级1NVIC_InitStructure.NVIC_IRQChannelSubPriority =5;     //子优先级0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //IRQ通道使能NVIC_Init(&NVIC_InitStructure);//USART 初始化设置USART_InitStructure.USART_BaudRate = bound;//设置波特率;USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_2;//2个停止位USART_InitStructure.USART_Parity = USART_Parity_Even;//偶校验USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式USART_Init(USART2, &USART_InitStructure); //初始化串口USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//开启中断USART_Cmd(USART2, ENABLE);                    //使能串口
}

3.2 信号接收程序

在这里采用中断接收方式:

void USART2_IRQHandler(void) //串口2中断服务程序
{u8 i;  if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET){sBUF[RC_LEN++]=USART_ReceiveData(USART2);//if(sBUF[0]==0x0f&&sBUF[24]==0x08&&RC_LEN==25)//如果帧头和帧尾满足     if(sBUF[0]==0x0f&&RC_LEN==25)//如果帧头和帧尾满足{RC_LEN=0;for(i=0;i<25;i++){if(i==0) uart2RxFlag=0;Data[i]=0;}//清零数组for(i=0;i<25;i++){Data[i]=sBUF[i];}uart2RxFlag=1;}}
}

3.3 数据解析

S.BUS每个字节11位,定义如下:
OneByte=1startbit+8databit+1paritybit+2stopbit(8E2)One Byte = 1 startbit + 8 databit + 1 paritybit + 2 stopbit (8E2)OneByte=1startbit+8databit+1paritybit+2stopbit(8E2)

而每个包25字节如下:
[startbyte] [data1] [data2] … [data22] [flags][endbyte]
其中,startbyte = 11110000b (0xF0);
data 1-22 放入16个通道 [ch1, 11bit][ch2, 11bit] … [ch16, 11bit] ,每个通道取值范围:(ch# = 0 bis 2047)。拼接如下:
channel 1 uses 8 bits from data1 and 3 bits from data2(共11 bits)
channel 2 uses last 5 bits from data2 and 6 bits from data3(共11 bits)
etc.
flags是信号位, bit7 = ch17 = digital channel (0x80)
bit6 = ch18 = digital channel (0x40)
bit5 = Frame lost, equivalent red LED on receiver (0x20)
bit4 = failsafe activated (0x10)
结束字节endbyte = 00000000b
解析的代码如下:

void Cal_RcData(void)//解析收到的通道数据
{u8 i,j=0;for(i=1;i<23;i++){data_22[j++]=Data[i];//摘取22位通道数据}for(i=0;i<22;i++)//转换位2进制存储{int k=1;for(j=0;j<8;j++){data_b[j+8*i]=(data_22[i]&k)>>j;k<<=1;}}for(i=0;i<16;i++)//清零过程,不清零莫名奇妙的错误{data_ch[i]=0x00;}for(j=0;j<16;j++)//转换为SBUS要求的格式{for(i=10;i>0;i--){data_ch[j]=data_ch[j]|(data_b[i+j*11]<<i);}}
}

STM32与Futaba遥控器进行S.Bus的通讯程序相关推荐

  1. STM32 NEC红外遥控器解码

    STM32 NEC红外遥控器解码 红外遥控编码格式 一体化红外接收头 STM32显示遥控器按下的数字代码 代码片 总结 原文链接:https://www.yourcee.com/newsinfo/29 ...

  2. [转]解决STM32开启定时器时立即进入一次中断程序问题

    [转]解决STM32开启定时器时立即进入一次中断程序问题 参考文章: (1)[转]解决STM32开启定时器时立即进入一次中断程序问题 (2)https://www.cnblogs.com/tubuji ...

  3. STM32的USART串口通讯程序(查询方式)

    STM32的USART串口通讯程序(查询方式) 文章目录 STM32的USART串口通讯程序(查询方式) 一.USART介绍 1.异步通信: 2.同步通信: 二.CubeMX创建项目 1.点击ACCE ...

  4. STM32仿三菱plc FX1N开原代码+电路图 本程序基于STM32F103VCT6开发

    STM32仿三菱plc FX1N开原代码+电路图 本程序基于STM32F103VCT6开发 兼容三菱GX Developer GX WORKS2 支持PLC写入,PLC读取,PLC校验,在线监视,在线 ...

  5. 在 stm32CubeMX下生成程序完成流水灯以及完成STM32的USART串口通讯程序实现STM32系统给上位机(win10)连续发送“hello windows”

    目录 一.STM32CubeMX简介及安装 二.利用STM32CubeMX生成代码 1.创建项目 2.配置芯片 3.导出项目 ​ 三.Keil中补充代码完善功能 四.在Keil中观察实验波形 五.US ...

  6. 了解串口协议,及完成STM32的USART串口通讯程序,并用keil观察波形

    文章目录 前言 一.串口协议 1.RS-232 2.485标准 二.RS-232.485和TTL电平 1.RS-232电平 2.485 3.TTL电平 4.区别 三.USB/TTL转232 1.CH3 ...

  7. STM32的USART串口通讯程序

    文章目录 一.STM32 USART串口通信 1.串口通信简介 1.1.物理层 1.2.协议层 2.STM32 的 USART 简介 二.STM32的USART串口通讯程序 1.创建项目 2.添加.s ...

  8. STM32通过读取芯片唯一ID号来实现程序的保护,防止被抄袭

    大家好!我叫肖亚平,从小热爱上了电子技术,读书时阴差阳错的选择了电子这方面的专业,学习电子技术.一直到今年毕业.对于我的理解来说,学校里面学到的技术不是全部实用,但是必须有用,所以一直奋斗在前线.我对 ...

  9. STM32单片机智能跟随小车_红外遥控(程序+原理图+PCB+论文报告)

    本设计: 基于STM32单片机智能跟随小车_红外遥控(程序+原理图+PCB+论文报告) 原理图:Altium Designer 程序编译器:keil 5 编程语言:C语言 编号C0021 资料下载 [ ...

最新文章

  1. 计算机四级操作系统原理知识汇总,2015年全国计算机四级《操作系统原理》考试内容...
  2. 深度学习-LeCun、Bengio和Hinton的联合综述(上)
  3. 灰色的rgb值_一行代码实现图片的灰色效果
  4. 将页面中表格数据导出excel格式的文件(vue)
  5. astar插件下载 就行_暗黑破坏神2地图插件常用的设置,做自己的私人订制游戏!...
  6. android多申请内存,Android内存等信息
  7. 如何用电路实现检测过零点?这个简单电路就能搞定
  8. 图像超分变率与分辨率
  9. 繁体字转换 java_java代码实现简体繁体转换
  10. 什么是闰年?闰年为什么是366天?为什么不能是100的倍数?
  11. uva 10306 简单DP
  12. 极光im java_java手写一个迷你版的Tomcat代码分享
  13. SpringMVC数据接收及传递
  14. 有道文档翻译导出文档_翻译文档的5个技巧
  15. 名帖172 李建中 行书《土母帖》
  16. Docker (八)容器数据卷使用
  17. 无线网卡改打印服务器,怎样将喷墨打印机改装成无线连接
  18. PyCharm打包失败及Pyinstall无法安装问题的解决
  19. 360,谷歌浏览器登录管家帐户密码查看
  20. 《RabbitMQ》什么是死信队列

热门文章

  1. 学黑客必去的网站“黑客基地”
  2. 使用PageHelper分页插件手动分页,其他查询数据出现串连问题
  3. 基于模型的系统工程最佳实践-读书心得
  4. 服务器系统安装配置详解教程
  5. php获取日期中的day,关于php:在laravel中获取当前日期,时间,日期
  6. 程序设计综合实践题库答案
  7. win7卸载avast杀毒软件的步骤--win10专业版
  8. C++——构造函数、析构函数以及复制构造函数
  9. 谷歌利用深度学习结合荧光标记,准确预估显微图像
  10. activity间数据传递实例_人品计算器