资讯详情

#【软件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.实验环境和设备

这个实验不仅可以通过购买蓝牙来解决。一般来说,几乎每个人都有一部手机,但不一定有一套飞行遥控器,但市场上有各种各样的遥控器。本文开发了特定的遥控器,最后将附加遥控器链接。

  1. 软件环境:STM32cubeIDE 1.8.0
  2. 硬件环境:STM32F407(正点原子探索者开发板)
  3. 一套遥控:HOTRC HT-6A航模遥控器接收机飞控套装 DIY自制6通道
  4. 下载模块:ST-link下载器 (下载器)
  5. 串口模块:串口转换器 (可替代232模块)
  6. 其他硬件物品: 三极管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就配置不想 普通也可以,默认就行 别忘了中断配置

(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通道

标签: 三极管bv8st三极管8550直插三极管68直插三极管ht7133a

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台