#【软件stm32cubeIDE下配置STM32F407uart1调试SBUS模块-学习笔记-基础样例-遥控小车与四轴模板】
#【软件stm32cubeIDE下配置STM32F407uartt调试SBUS模块-学习笔记-基础样例-遥控小车与四轴模板】
- 1、前言
- 2、实验环境以及器材
- 3、第一步:初步了解SBUS
- (1)什么是sbus,简单说说
- (2)硬件取反
- (3)基本注意点
- 4、第二步:制作硬件取反
- (1)网上硬件图
- (2)我的硬件图
- 5、第三步:接上串口试试,先不忙写代码
- 6、第四步:代码实验
- (1)软件基本配置,下载口和时钟
- (2)uart1的DMA等配置
- (3)uart4的配置,用作输出显示。
- (4)时钟配置,然后生成代码
- (5)加入printf,输出显示
- (6)加入uart1的DMA等回调函数
- (7)打印输出显示。
- 代码:实验代码连接
- 8、实际效果演示
- 9、后期细节
- (1)接收长度27问题
- (2)判断断联问题,数据接收位【23】位
- 10、参考连接
- (1)硬件取反图,以及基础知识了解
- (2)其它人样例代码
- 11、硬件连接
- (1)三极管以及电阻
- (2)飞控遥控器
1、前言
最近一段时间在调试飞控遥控器模块,是基于SBUS,自己在裸机上跑通了,很多细节越值的注意,写这边文章也是给自己做个记录,保持初学者之心,这篇其实跟蓝牙那片有相似方式与文章结构。
2、实验环境以及器材
本次实验不是只买个蓝牙就能解决的,一般几乎每个人都有一部手机,但不一定没啥事带着一套飞控遥控器,而是市面上遥控器又五花八门,本篇针对特定遥控器开发,最文章最后会附上遥控器链接。
- 软件环境:STM32cubeIDE 1.8.0
- 硬件环境:STM32F407(正点原子探索者开发板)
- 一套遥控:HOTRC HT-6A航模遥控器接收机飞控套装 DIY自制6通道
- 下载模块:ST-link下载器 (下载器)
- 串口模块:串口转换器 (可用232模块代替)
- 硬件其它物品: 三极管8050,两个直插电阻4.7K(可以自行更换其它类型)
实物照片:
3、第一步:初步了解SBUS
(1)什么是sbus,简单说说
翻了一段时间网上的文章后,总结,sbus就是基于串口的一套传输协议,就像我们平时使用9600波特率的串口一样,在使用它时,只是配置上稍微不同。打个比方,就好像铁轨上能跑绿色铁皮车,动车组,同样也能跑高级些的高铁列车,仔细理解这个比喻,铁轨没变,跑的东西,运输变了。
(2)硬件取反
这个很多文章都说了,要硬件取反,而且时必须硬件取反,软件只能反向数据位,不能反向停止位啥的,所以不要企图走捷径,还是老老实实去焊接个反相器吧。
(3)基本注意点
在使用sbus时候,和普通串口只有一点配置上的区别.
- 波特率100K(100000)
- 停止位 2个
- 校验EVEN
- sbus数据是:以0F开头,00为结束的。
如下图所示(已反向),串口助手打印出来的数据,以及配置,最好每行25bit,方便看。
4、第二步:制作硬件取反
(1)网上硬件图
这部分网上说挺多了,大部分都大同小异,只有电阻阻值的不同,都是用NPN的8050三级管来做,建议直接网上淘个,具体链接也放在后面了。
(2)我的硬件图
以下出自我灵魂的画手,主要需要注意的是,三极管引脚,不同型号NPN三极管理论上都可以,但是买完后,一定要对下引脚图,要不可能就不好使,一脸懵逼,如下图所示。
5、第三步:接上串口试试,先不忙写代码
同之前测试蓝牙一样,焊借好了后,先不着急写代码,先看看有数据过来没有,接上串口,设置好配置,如下图,是实际逻辑分析仪抓取到的。上半部分是反向完成的数据,下部分是为反向数据。
如下图,是串口抓取到数据。
你的串口工具基本稳定发送如上数据,那么恭喜你,你基本已经走完一半路程。
6、第四步:代码实验
完成第三步,可以进行下一步了,使用编译器写程序。
(1)软件基本配置,下载口和时钟
(2)uart1的DMA等配置
1)波特率100000 9bit EVEN 2STOP
2)DMA配置
3)中断配置
(3)uart4的配置,用作输出显示。
1)这个想配置DMA就配置不想 普普通通也行,默认就行
2)中断配置别忘了
(4)时钟配置,然后生成代码
(5)加入printf,输出显示
我们需要使用printf,帮我们输出一些信息,加入printf重定向,具体可以看我之前写的文章。
https://waka-can.blog.csdn.net/article/details/124452661?spm=1001.2014.3001.5502
简单说,mian.c加入如下代码
#include "stdio.h"
#include "stdint.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes *//* USER CODE END Includes */
//>>第二步:定义数组
uint8_t u_buf[64];/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
//>>第三步:定义输出函数printf
#define printf(...) HAL_UART_Transmit((UART_HandleTypeDef * )&huart4, (uint8_t *)u_buf,\sprintf((char *)u_buf,__VA_ARGS__),0x200);
(6)加入uart1的DMA等回调函数
具体代码我就不一一列举了,如果需要直接去我代码里去,觉得CSDN要积分的话,可以私信我要代码。
(1)初始化声明下
(2)回调函数
(3)加入中断函数内
(4)加入转化函数:通用代码
void get_sbus_data(uint8_t sbus_data[27], uint16_t sbus_channel[16])
{sbus_channel[0] = ((sbus_data[1]|sbus_data[2]<<8) & 0x07FF);sbus_channel[1] = ((sbus_data[2]>>3 |sbus_data[3]<<5) & 0x07FF);sbus_channel[2] = ((sbus_data[3]>>6 |sbus_data[4]<<2 |sbus_data[5]<<10) & 0x07FF);sbus_channel[3] = ((sbus_data[5]>>1 |sbus_data[6]<<7) & 0x07FF);sbus_channel[4] = ((sbus_data[6]>>4 |sbus_data[7]<<4) & 0x07FF);sbus_channel[5] = ((sbus_data[7]>>7 |sbus_data[8]<<1 |sbus_data[9]<<9) & 0x07FF);sbus_channel[6] = ((sbus_data[9]>>2 |sbus_data[10]<<6) & 0x07FF);sbus_channel[7] = ((sbus_data[10]>>5|sbus_data[11]<<3) & 0x07FF);sbus_channel[8] = ((sbus_data[12] |sbus_data[13]<<8) & 0x07FF);sbus_channel[9] = ((sbus_data[13]>>3|sbus_data[14]<<5) & 0x07FF);sbus_channel[10] = ((sbus_data[14]>>6|sbus_data[15]<<2|sbus_data[16]<<10) & 0x07FF);sbus_channel[11] = ((sbus_data[16]>>1|sbus_data[17]<<7) & 0x07FF);sbus_channel[12] = ((sbus_data[17]>>4|sbus_data[18]<<4) & 0x07FF);sbus_channel[13] = ((sbus_data[18]>>7|sbus_data[19]<<1|sbus_data[20]<<9)& 0x07FF);sbus_channel[14] = ((sbus_data[20]>>2|sbus_data[21]<<6) & 0x07FF);sbus_channel[15] = ((sbus_data[21]>>5|sbus_data[22]<<3) & 0x07FF);}
(7)打印输出显示。
代码:实验代码连接
具体本次代码连接:https://download.csdn.net/download/qq_22146161/85826413
8、实际效果演示
这个视频还是放在B站了,有兴趣可以看下。
https://www.bilibili.com/video/BV15G411x7TQ/
9、后期细节
(1)接收长度27问题
查看他人编写的代码时发现,有uart1接收长度为27位,这个应该都行,只要能顺利接收进来就行,也没必要给太长。
(2)判断断联问题,数据接收位【23】位
查看资料时,发现有个判断断联标志位,这个设计非常好,如果在四轴上,一旦的断联,基本是损害物品,所以这个位需要注意下,最好查查这个位怎么取,怎么用。
10、参考连接
(1)硬件取反图,以及基础知识了解
自己开始也是小白,从他人哪里获取知识,当然需要标明从哪里获取。
参考连接:https://blog.csdn.net/peach_orange/article/details/52958385
参考连接:https://blog.csdn.net/ReadAir/article/details/102631513
(2)其它人样例代码
如果你想要keil版本的,在正点原子社区有人做了,自己验证过,可以的。
参考连接:http://www.openedv.com/forum.php?mod=viewthread&tid=332860
11、硬件连接
(1)三极管以及电阻
网上某宝非常多:8050三极管等
(2)飞控遥控器
网上某宝非常多:飞控遥控:HOTRC HT-6A航模遥控器接收机飞控套装 DIY自制6通道
#【软件stm32cubeIDE下配置STM32F407uart1调试SBUS模块-学习笔记-基础样例-遥控小车与四轴模板】相关推荐
- # 软件stm32cubeIDE下配置STM32F103的独立看门狗iwdg-学习笔记-基础样例
# 软件stm32cubeIDE下配置STM32F103的独立看门狗iwdg-学习笔记-基础样例 (1)叙述 (2)环境说明 (3)学习流程说明 (1)了解网上资料 (2)查找手册 (3)测试逻辑说明 ...
- 软件STM32cubeIDE下STM32F4xx使用32位定时器2(TIM2)用DMA+PWM点亮灯带WS2812-基础样例
软件STM32cubeIDE下STM32F4xx使用32位定时器2(TIM2)用DMA+PWM点亮灯带WS2812-基础样例 (1)前言6 (2)环境 (3)问题细节 (4)解决思路 (5)代码链接 ...
- vscode怎么配置python运行环境f5_VSCode下配置python调试运行环境的方法_python
这篇文章主要介绍了VSCode下配置python调试运行环境的方法,需要的朋友可以参考下 VSCode配置python调试环境 很久之前的一个东东,翻出来看看VSCode配置python调试环境 * ...
- cma linux 起始地址,CMA模块学习笔记
CMA模块学习笔记 作者:linuxer 发布于:2017-6-28 18:29 分类:内存管理 前言 本文是近期学习CMA模块的一个学习笔记,方便日后遗忘的时候,回来查询以便迅速恢复上下文. 学习的 ...
- python模块学习笔记
python模块学习笔记 1.Python自动发送邮件smtplib 2.制作二维码图片MyQR 3.绝对值模块math 4.CSV模块 5.openpyxl 模块,操作Excel文件 ExcelMa ...
- 动态环境下的SLAM:DynaSLAM 论文学习笔记
动态环境下的SLAM:DynaSLAM 论文学习笔记 这篇文章 论文摘要 系统流程 相关环节的实现方法 神经网络检测图中动态物体(Mask R-CNN) Low-Cost Tracking 使用多视图 ...
- Arduino模块学习笔记(一)—GPS模块的使用
Arduino模块学习笔记(一)--GSP模块的使用 文章目录 Arduino模块学习笔记(一)--GSP模块的使用 所需组件 一.模块使用介绍 1.GPS模块(在室内时,一般获取不到位置信息) 2. ...
- STM32CubeIDE、HAL、OLED、MPU6050学习笔记
器件:1.STM32F103C8T6 (¥17.3) 2.中景园0.96寸OLED显示屏 (¥9) 3.MPU6050 (¥6.4)信泰微电子购买 4.ST-LINK V2(进口芯片版本,¥19.8 ...
- IPy-IPv4和IPv6地址处理模块学习笔记
在日常网络规划中,会有很多关于IP地址的分配规划问题,如果是手动分配,在量很大的情况下,容易出错.而利用IPy这个python模块,可以很容易实现对iP地址的分配等操作. 以下是对IPy模块学习的一个 ...
- 安装成功配置环境变量_go语言学习笔记-Windows10开发环境安装和环境变量配置
相关文档 go语言学习笔记-目录 1.安装 1.1.访问 https://golang.google.cn/dl/ 或 https://golang.org/dl/ 下载官方安装包 1.2.选择Win ...
最新文章
- 《马哥教育协办GIAC、GOPS顶级技术峰会完美落幕》
- java hashmap 输出_JAVA如何把HashMap内容输出到文本文件
- 很好的PHP分页类(调试过)
- 太强了,300分钟撸一个基于redis的亿级用户高并发系统
- bat tomcat程序在后台执行_jenkins 中利用 cmd 命令启动 tomcat,进程被杀
- 带你自学Python系列(五):Python解决列表字符不区分大小写问题
- java 获取域名_Java获取域名,Java从URL地址中获取域名,Java从Request 获取域名
- 推荐:免费万能视音频转换软件--格式工厂
- linux .deb后缀文件,tar.gz和bin,以及rpm,deb等linux后缀的文件的区别
- 利用MQL5创建您自己的图形面板
- Swift桥接OC,手动创建Objective-OC Bridging Header
- 武汉大学计算机在职,武汉大学计算机技术工程硕士专业在职研究生 学位论文工作开展步骤概述...
- bilibili封面提取
- 宇枫资本投资理财投资入门与技巧
- postgresql安装报错
- 计算机在化学中的应用免费论文,计算机在化学化工中的应用
- centos中startup.sh启动服务脚本
- Abaqus后处理 - 常用技巧
- QT- label实现滚动字幕 (跑马灯)效果 -像素级
- 晶振的负载电容和频偏的计算方法总结
热门文章
- android使用cpu软解,Android 使用自带的MediaCodec 框架进行本地视频压缩,速度嗖嗖的,亲测有效!!!...
- ABAP 正则表达式(Regular Expressions)
- 虚幻引擎源码分析(3)
- 月薪30K的软件测试简历怎么包装,软件测试项目经验怎么写?软件测试简历编写,赠软件测试简历模板
- 软件测试简历上实战项目:开源项目部署--litemall商城
- STM32读取伺服电机编码器信号
- 杨中科:我的大学生活 转载
- 个人电话号码查询系统
- 绝对值编码器 c语言,绝对式光电编码器
- 01将乌班图系统安装到U盘,实现即插即用