使用DMA传输遥控器数据

文章目录

    • DBUS协议
    • C板上的DBUS
    • DR16 接收机
    • 机器人控制协议
    • 配置遥控器传输协议
    • 添加官方函数库
    • 代码编写
      • 程序流程
      • 1.初始化发送DMA和接收DMA
      • 2.编写USART3的串口中断函数及调用解码函数
      • 3.主函数的循环中调用串口实现的函数

DBUS协议

  • DBUS通信协议和串口类似
  • DBUS的传输速率(波特率)为100kbit/s,传输的单位数据长度为8位
  • 奇偶校验位为偶校验,结束位1位
  • DBUS使用的电平标准与串口相反(在DBUS协议中0表示高电平,1表示低电平)
  • 使用串口进行接收时需要在接收电路上添加一个反相器

C板上的DBUS

在C板的原理图中可以找到DBUS

在这里插入图片描述

该DBUS通过一个反相器后与UART3的接收端相连

使用DBUS接收的遥控器数据,一帧数据的长度为18字节,一共144位

DR16 接收机

DR16接收机输出的信号为标准的DBUS协议数据

DR16 接收机是一款工作频率为2.4 GHz 的16 通道接收机,配合DT7 遥控器使用。

机器人控制协议

当遥控器与接收机建立连接后,接收机每隔14ms通过DBUS发送一帧18字节数据

除了通过遥控器直接控制之外,还可以通过PC进行控制,控制链如下:

在这里插入图片描述

配置遥控器传输协议

先将Connecitivity下的USART3打开,将mode设置为 Asynchronous(异步通讯方式)

波特率设置为100000,数据帧设置为8位数据位,无校验位,1位停止位

然后开启USART3的DMA,添加USART_RX,配置为最高的优先级

配置为循环模式

开启USART3的全局中断

然后可以自动生成代码

添加官方函数库

我们不需要学会如何使用寄存器的方法去做遥控器数据的串口接收中断和位运算的方法去做遥控器的数据解析

我们只需要学会调用官方函数库并使用官方代码即可

将官方样例代码“9.remote_control_dma”中的“applications”和“bsp”文件夹复制到工程中

在keil中按如下操作

在这里插入图片描述

先新建applications和bsp组

在这里插入图片描述

点击新创建的组,在file栏点击Add添加我们刚刚复制的源文件

在这里插入图片描述

然后将复制的代码全部添加到我们创建的组中

接着打开魔法棒,选择C/C++,选择Include Paths的最右侧的三个点

在这里插入图片描述

双击空白,选择三个点,将刚刚的文件夹路径添加到include路径中

在这里插入图片描述

再将bsp文件夹中的boards文件夹添加到路径中即可在本地文件中调用我们复制进来的源文件中

的函数

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

代码编写

程序流程

  1. 先将USART1的DMA发送初始化,和USART3的DMA接收初始化
  2. 然后在USART3的串口接收中断中使用DMA接收遥控器的数据,并使用官方解码函数进行解码
  3. 然后在主函数的循环中调用串口实现的函数,将解码完成的遥控器函数通过USART1的DMA发送功能发送出来
    在这里插入图片描述

1.初始化发送DMA和接收DMA

将USART1的DMA发送初始化,和USART3的DMA接收初始化

a. 实现 C 语言中的 printf

(利用 stdarg.h 下的 va_start 函数和 vsprintf 函数再配合串口的 DMA 发送功能)

将要发送的内容存储在tx_buf中,将要发送的数据长度存储在len变量中,然后将tx_buf的首地址和数据长度len传递给DMA发送函数完成DMA的数据发送

//初始化USART1的DMA
//要用头文件#include<stdarg.h>
const RC_ctrl_t *local_rc_ctrl;

void usart_printf(const char *fmt,...)
{
   
   
 	static uint8_t tx_buf[256] = {
   
   0};
 	static va_list ap;//保存参数起始地址
 	static uint16_t len;
 	va_start(ap, fmt);
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书阁下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值