stm32实现SBUS传输

STM32实现四驱小车(二)通信任务——遥控器SBUS通信 目录一. 遥控器通信原理简介二. SBUS信号解析1. SBUS信号简介2. STM32F7解析SBUS信号三. 通信任务实现 一. 遥控器通信原理简介 要实现一个遥控小车当然要有一个遥控器了,目前市面上常用的航模遥控器基本都是2.4G无线信号,从遥控器到小车子的链路是这样的。 接收机出来的信号一般有SBUS信号、PPM信号、PWM信号,SBUS信号就是一路串行信号,连接到控制板的串口按协议解析就行了。PWM信号就不说了,多路PWM接口表示多个信号,PPM信号也是一路信号,只不过它是一串波,它把多路PWM值 阅读详情

1. 基本配置

串口波特率:100k,9位数据位,偶校验,2位停止位,利用dma空闲中断进行接收数据和处理数据

在这里插入图片描述
在这里插入图片描述

接收函数

int8_t BSP_UART_IDLE_PollData(UART_HandleTypeDef *huart, struct RF207S_SBUS_DataStructure *rf207_sbus_data)
{

	int8_t nret = 0;
	if (Uart_Receive_Data.rxok == 0) //没有接收完就退出
	{
		nret = -1;

	}
	else
	{
		if (Uart_Receive_Data.rxlen < 25) //帧不完整
		{
			nret = -2;
		}
		else if (Uart_Receive_Data.rxbuf[0] != 0x0f || Uart_Receive_Data.rxbuf[24] != 0x00) //帧错误
		{
			nret = -3;
		}
		if (nret == 0)
		{
			//遥控器的取值范围:-100 ---->100 返回值的范围0----100
			// Min:354    Max:1696   ----->1342    chx-353/1342. == y*100
			rf207_sbus_data->ch1 = (((int16_t) Uart_Receive_Data.rxbuf[2] << 8) + ((int16_t) Uart_Receive_Data.rxbuf[1])) & 0x07ff;
			rf207_sbus_data->ch1 = (rf207_sbus_data->ch1-353)*100/1342.;
			rf207_sbus_data->ch2 = (((int16_t) Uart_Receive_Data.rxbuf[3] << 5) + ((int16_t) Uart_Receive_Data.rxbuf[2] >> 3))& 0x07ff;
			rf207_sbus_data->ch2 = (rf207_sbus_data->ch2-353)*100/1342.;
			rf207_sbus_data->ch3 = (((int16_t) Uart_Receive_Data.rxbuf[5] << 10) + ((int16_t) Uart_Receive_Data.rxbuf[4] << 2) + ((int16_t) Uart_Receive_Data.rxbuf[3] >> 6)) & 0x07ff;
			rf207_sbus_data->ch3 = (rf207_sbus_data->ch3-353)*100/1342.;
			rf207_sbus_data->ch4 = (((int16_t) Uart_Receive_Data.rxbuf[6] << 7) + ((int16_t) Uart_Receive_Data.rxbuf[5] >> 1))& 0x07ff;
			rf207_sbus_data->ch4 = (rf207_sbus_data->ch4-353)*100/1342.;
			rf207_sbus_data->ch5 =(((int16_t)Uart_Receive_Data.rxbuf[9]<<9) + ((int16_t)Uart_Receive_Data.rxbuf[8]<<1) + ((int16_t)buf[7]>>7)) & 0x07ff;
			rf207_sbus_data->ch5 = (rf207_sbus_data->ch5-353)*100/1342.;
			rf207_sbus_data->ch6 =(((int16_t)Uart_Receive_Data.rxbuf[10]<<6) + ((int16_t)Uart_Receive_Data.rxbuf[9]>>2)) & 0x07ff;
			rf207_sbus_data->ch6 = (rf207_sbus_data->ch6-353)*100/1342.;
			rf207_sbus_data->ch7 =(((int16_t)Uart_Receive_Data.rxbuf[11]<<3) + ((int16_t)Uart_Receive_Data.rxbuf[10]>>5)) & 0x07ff;
			rf207_sbus_data->ch7 = (rf207_sbus_data->ch7-353)*100/1342.;
			rf207_sbus_data->ch8 =(((int16_t)Uart_Receive_Data.rxbuf[13]<<8) + (int16_t)Uart_Receive_Data.rxbuf[12]) & 0x07ff;
			rf207_sbus_data->ch8 = (rf207_sbus_data->ch8-353)*100/1342.;
			rf207_sbus_data->ch9 =(((int16_t)Uart_Receive_Data.rxbuf[14]<<5) + ((int16_t)Uart_Receive_Data.rxbuf[13]>>3)) & 0x07ff;
			rf207_sbus_data->ch9 = (rf207_sbus_data->ch9-353)*100/1342.;
			rf207_sbus_data->ch10 =(((int16_t)Uart_Receive_Data.rxbuf[16]<<10) + ((int16_t)Uart_Receive_Data.rxbuf[15]<<2) + ((int16_t)Uart_Receive_Data.rxbuf[14]>>6)) & 0x07ff;
			rf207_sbus_data->ch10 = (rf207_sbus_data->ch10-353)*100/1342.;
		}
		Uart_Receive_Data.rxok = 0;
		__HAL_UART_ENABLE_IT(huart, UART_IT_IDLE); //使能串口空闲中断
		memset(Uart_Receive_Data.rxbuf, 0, UART_RECEIVE_IDLE_RX_MAXLEN);
		HAL_UART_Receive_DMA(huart, Uart_Receive_Data.rxbuf, UART_RECEIVE_IDLE_RX_MAXLEN); //开启串口DMA接收
	}

	return nret;
}

空闲中断函数(将函数放在默认的空闲中断之前)记得在it中断文件中包含该函数的头文件

void BSP_UART_IDLE_CallBack(UART_HandleTypeDef *huart)
{
	if ((__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) != RESET))
	{
		HAL_UART_DMAStop(huart);
		__HAL_UART_CLEAR_IDLEFLAG(huart);
		Uart_Receive_Data.rxlen = UART_RECEIVE_IDLE_RX_MAXLEN - __HAL_DMA_GET_COUNTER(huart->hdmarx);
		Uart_Receive_Data.rxok = 1;
	}
}

在这里插入图片描述

避坑指南:

用串口调试sbus:

串口用的是小端模式,是低位先发,刚好sbus一个通道的值是16位,所以在串口里显示的应该是两个16进制的数,后面的16进制数是高位,

建议直接用调试直接看内存数据

深入解析嵌入式无人机通信协议:从PWM到SBUS的实战指南 本文深入解析了嵌入式无人机通信协议,重点对比了经典的PWM协议与高效的SBUS协议。通过生动的比喻、示波器实测演示和基于STM32的代码实战,详细讲解了PWM的单通道脉宽控制原理与SBUS的多通道串行总线解码方法,并提供了SBUS转PWM转换器的制作指南与常见问题排查技巧,是无人机开发者掌握底层通信的实用指南。 阅读详情

相关推荐

别再傻傻分不清了!航模接收机PWM、PPM、SBUS协议保姆级对比与实战选型指南

本文深入解析航模接收机的PWM、PPM、SBUS三种主流协议,详细对比其信号特征、传输效率和抗干扰能力,并提供针对不同应用场景的选型建议。特别适合航模爱好者和工程师快速掌握协议差异,避免选型错误导致的性能问题,提升航模遥控系统的稳定性和响应速度。

weixin_32025789的博客 349

基于STM32实现sBus协议数据获取、解析并转为CAN协议数据

nnd,写了五个小时终于写完了!!!我去干饭了,下次有好玩的再写!

weixin_45562784的博客 4117

STM32 HAL库串口空闲中断+DMA接收不定长数据实战(附避坑指南)

本文深入解析了STM32 HAL库中利用串口空闲中断与DMA接收不定长数据的实战方法。文章从核心机制入手,详细剖析了HAL_UARTEx_ReceiveToIdle_DMA函数的使用,并重点提供了避免DMA半传输中断等常见问题的避坑指南,旨在帮助开发者构建高效、稳定的串口通信框架。

ik678901234的博客 650

【SBUS】一文看懂SBUS协议

S.BUS是一个串行通信协议,S.BUS是FUTABA提出的舵机控制总线,S.bus使用RS232C串口的硬件协议作为自己的硬件运行基础。使用TTL电平,即3.3V。使用负逻辑,即低电平为“1”,高电平为“0”。波特率:100000(100k),注意:不兼容波特率115200。

郭老二 1万+

基于stm32和富斯遥控器的SBUS波形分析和通讯实现

基于stm32和富斯遥控器的SBUS波形分析和通讯实现简介软件环境和硬件搭建软件环境硬件搭建SBUS协议SBUS协议SBUS波形分析程序部分程序流程核心程序总结 简介 最近一个小项目用到了富斯的遥控器(使用的SBUS协议),目的是实现通过遥控器的各个通道对小车进行简单控制(移动、灯光、不同工作模式等),一点小经验和大家分享下。SBUS网上的资料很多,本篇更偏向于新人对SBUS的快速理解和直接应用,对一些不太常用的细则不再进行介绍。 因为是第一次使用SBUS协议,根据个人习惯在学习通讯协议时喜欢对照着实际波形

u012194477的博客 1万+

STM32实现水下四旋翼(三)通信任务——遥控器SBUS通信

目录一. 遥控器SBUS通信原理1. 遥控器通信原理2. SBUS通信协议二. 基于UCOS-III操作系统创建通信任务三. 实现SBUS通信驱动程序四. 实现遥控器SBUS通信的应用程序 一. 遥控器SBUS通信原理 1. 遥控器通信原理 无人系统的远程控制包括遥手持遥控器控制和地面站控制。遥控器是实现无人车、无人机、无人潜航器运动控制的基本部件,用一个高大上点的词叫人在回路控制,或者人机协同控制。也就是将人的意志通过遥控器发送给机器人端,让机器人按照我们想要的动作去执行任务,例如前进后退、调速、调姿、调

qq_30267617的博客 5840

APM中SBUS信号解析

一、SBUS信号概述 SBUS信号以串口传输,波特率为100000bps。每2ms一帧,一帧25个字节。 其中第0字节为起始帧,固定为0x0F。第24字节为帧尾。第1~22字节为1-16比例通道数据字节。 第23字节为状态字,具体位含义如下: 第3位:是否丢帧标识,1为丢帧,0为正常。 第4位:是否失控保护是否激活,1为激活。 二、APM中SBUS解析 ...

qq_30623591的博客 3271

使用 STM32F103 实现 SBUS 接口:硬件设计、软件开发与代码实现

摘要: 本文详细介绍了基于STM32F103单片机实现SBUS接口的完整方案。SBUS作为无人机主流数字控制协议,具有抗干扰强、16通道、低延迟等特点。文章从协议特性分析入手,重点阐述了硬件设计中的电平反向转换(三极管/反相器方案)和抗干扰措施,以及软件开发的帧解析和11位通道数据提取方法。通过分层架构设计(硬件抽象层、协议解析层、应用层)实现模块化开发,并提供了完整的STM32CubeMX工程代码,包括UART中断接收、帧同步校验和通道数据解析。最后还介绍了SBUS转PPM/MAVLink的协议转换方法,

bother3000的博客 2439

【亲测免费】 探索STM32与SBUS接收机的无缝通信:一个开源项目的深度解析

探索STM32与SBUS接收机的无缝通信:一个开源项目的深度解析 【下载地址】STM32读取SBUS接收机资源文件介绍 STM32读取SBUS接收机资源文件介绍本仓库提供了一个用于STM32微控制器读取SBUS接收机的资源文件 项...

gitblog_09712的博客 908

STM32F103串口解析SBUS信号.zip

STM32F103串口解析SBUS信号,使用方法: 1. 使用串口2连接接收机 2. 使用串口1连接串口调试助手; 3. 接收机需要连接方向器再连接串口; 4. 串口配置请按照sbus的通信协议,具体看工程中的串口初始化。

STM32读取SBUS接收机

STM32解析航模SBUS接收机程序。包括STM32解析程序和C#上位机显示程序。串口需要应交反向。

STM32F7 HAL库实现M3508电机控制

STM32F7 HAL库实现M3508电机控制 【下载地址】STM32F7HAL库实现M3508电机控制 本项目使用STM32F7单片机,通过HAL库实现对M3508电机的位置PID和速度PID控制。项目中还集成了乐迪遥控器,用于模式切换以及位置、速度和电流的设置。单片机与遥控器接收机之间采用SBUS通信协议进行数据传输...

gitblog_09723的博客 845

STM32实现完整SBUS协议解析与编码

在STM32F407单片机上实现完整的Futaba S.BUS协议。使用DMA双向数据传输。

STM32 上部署 MAVLink 协议教程

MAVLink飞控和地面站之间通信。飞控和外设之间通信。飞控和伴随计算机之间通信。模块之间传递标准化消息,例如姿态、位置、通道、心跳、命令等。二进制协议,数据紧凑,适合串口和无线链路。标准化消息很多,例如HEARTBEATATTITUDE。支持不同版本,常见是MAVLink v1和MAVLink v2。每条消息都有固定msgid、固定或规定好的负载结构、CRC extra。对于 STM32 这种资源较小的 MCU 来说,MAVLink 很适合做“标准化串口协议”。

2301_79618994的博客 513

Ubuntu 22.04源码编译安装ROS Noetic

Ubuntu 22.04源码编译安装ROS Noetic

Drknown的博客 2万+

双臂复合机器人眼在手外标定实战:从原理到D435标定流程详解

本文详细解析了双臂复合机器人中眼在手外标定的核心原理与实战流程。通过阐述坐标系转换与AX=XB方程,重点介绍了使用Intel RealSense D435相机进行标定的完整步骤,包括环境搭建、数据采集、计算与验证,并提供了关键的避坑指南,帮助工程师实现相机与机械臂基座间的精确坐标对齐。

weixin_29100927的博客 449

STM32解析SBUS信号例程详解

文章目录1. sbus信号简介2. STM32F7解析SBUS信号例程(1) 串口配置(2)串口中断接收(3) 信号解析 1. sbus信号简介 最近在搞一个项目的通信和控制,用到了SBUS,记录一下心得。 SBUS全称serial-bus,是一种串口通信协议。 串口配置: 100k波特率,8位数据位,2位停止位,偶校验(EVEN),无控流,25个字节。 协议格式:(8字节) [startbyte] [data1][data2]…[data22][flags][endbyte] startbyte=0x0

qq_30267617的博客 2万+

Abaqus梁模型仿真中的常见陷阱与优化策略

本文深入探讨了Abaqus梁模型仿真中的常见陷阱与优化策略,涵盖几何建模、材料属性设置、边界条件处理等关键环节。针对梁截面方向定义、网格划分、复合截面建模等典型问题,提供了实用的Python脚本示例和优化方案,帮助工程师避免计算错误并提升仿真精度。文章特别强调了动力分析中的网格密度要求和材料非线性考虑,为复杂工程应用提供专业指导。

weixin_29099217的博客 461

STM32 Futaba SBUS协议解析

Futaba S.BUS协议解析及STM32F103VET6协议数据读取及解码程序实现

Brendon_Tan的博客 3万+

回归预测 | MATLAB实现SVR(支持向量机回归)K折交叉验证

回归预测 | MATLAB实现SVR(支持向量机回归)K折交叉验证 目录回归预测 | MATLAB实现SVR(支持向量机回归)K折交叉验证基本介绍划分原理留一划分交叉验证K折交叉数据下载程序设计参考资料致谢 基本介绍 在机器学习里,通常来说我们不能将全部用于数据训练模型,否则我们将没有数据集对该模型进行验证,从而评估我们的模型的预测效果。为了解决这一问题,有如下常用的方法: 第一种是最简单的,也是很容易就想到的。我们可以把整个数据集分成两部分,一部分用于训练,一部分用于验证,这也就是我们经常提到的训练集

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 6375

基于STM32、HAL库的ZMOD4510AI4R气体传感器驱动程序设计

ZMOD4510AI4R是Renesas公司推出的一款数字空气质量传感器,主要用于检测臭氧(O₃)和总挥发性有机化合物(TVOC)浓度。(status & 0x80)) // 检查数据就绪位。// 等待测量完成 (实际应用中应该使用非阻塞方式)// 转换为ppb (简化转换,实际应根据传感器文档校准)* @param hzmod: ZMOD4510句柄。* @param tvoc: TVOC浓度(ppb)* @param ozone: 臭氧浓度(ppb)* @param hi2c: I2C句柄。

corlin6688的博客 311

不清楚SBUS,这份SBUS协议详解请收藏

SBUS,全称Serial Bus,即串行通信总线。本质上是一种串口通信协议,采用100K的波特率,8位数据位,2位停止位,偶效验,即8E2的串口通信。

振华OPPO的博客世界 3万+

Autosar EcuM配置-初始化及下电执行函数-基于ETAS软件

Autosar EcuM学习笔记-上电初始化执行函数及下电前执行函数,本文介绍在EcuM中的配置及使用。

赞的博客 849

SBUS协议学习

目录 文章目录目录摘要1.什么是SBUS协议2. STM32 解析 SBUS协议2.1初始化串口接收2.2配置串口中断服务函数2.3进行SBUS数据解析2.4在任务中调用2.5相关变量和定义3.获取数据 摘要 本节主要记录自己学习SBUS协议的过程,欢迎批评指正!!!这里参考下面这个博客:sbus协议解析 1.什么是SBUS协议 SBUS是一个接收机串行总线输出,通过这根总线,可以获得遥控器上所...

陌城烟雨 1万+

pg lib的信息及产生pg lib的三种方法

pg lib相比basic lib会多几方面pg 信息。除了pg arc(pg pin)以外,liberty还提供电压值,以及pmk cell的power_down_function功能相关信息。1.电压值除了常见的primary pg还有secondary pg和衬底。2.pg arc后端需要去做redhawk功耗分析,需要pg liberty提供pg arc,如果没有pg arc就需要手动去写custom lib代替3.pmk cell的power_down_function。

m0_61544122的博客 595

Copilot在游戏开发中的应用:Unity脚本自动生成实践

2021年GitHub Copilot的发布,为代码自动生成带来了革命性突破。作为基于GPT模型训练的AI辅助编程工具,Copilot能根据注释、函数名、代码上下文,实时生成符合语法和逻辑的代码片段,甚至完整脚本。减少重复劳动:自动生成模板代码(如生命周期、结构),让你专注核心逻辑;降低API学习成本:对Unity特有的组件(RigidbodyAnimator)、类(),Copilot能生成符合最佳实践的调用代码;统一代码风格:通过团队共享提示词模板,让生成的代码符合项目规范;快速原型迭代。

AIGC应用创新大全的博客 1618
上一篇: kicad导出Gerber文件到嘉立创打板……
下一篇: 记录:clion上开发stm32 环境配置(保姆级详细教程)----->2023_7_1
DennisReYoonjiho
博客等级 码龄7年 216粉丝 34原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值