KEIL工程移植

本文利用STM32F4的控制板的PX4控制板,并且利用cubeMX进行工程配置来实现MAVLink的移植。最终实现PX4控制板与QGC上位机的通信,以此来验证MAVLink是否成功移植。

1.因为转换的C语言代码都是以.h的文件夹实现的,所以把上图的文件包含到工程路径中,并且包含如下的头文件即可包含全部实现的

#include

接着利用cubeMx进行串口的配置,我们使用中断DMA接收与普通轮询模式发送。不是本文重点,不做描述,可百度,亦可有兴趣观看视频。

接着我们可以在keil工程里面全局编译一下,会发现好多的错误。这个错误跟编译器有关。一种方式是直接修改每一个错误,可以自行百度“mavlink移植 ”;当然还有一种方法,是在工程配置中加入如下配置:

--no_strict --gnu

目的是想让MAVLink这段代码采用gun的格式进行编译,但是要注意其他的代码需要保证是使用的keil的默认编译器__CC_ARM进行编译。再次编译会发现没有错误。

2.接着就是实现发送、接收数据的底层函数。

C MAVLink库的实现的多通道的数据流,同样的程序可以在不同的独立通道流上进行传输。如果只存在一个MAVLink数据流,channel 0默认被用来进行数据传输(MAVLINK_COMM_0)

接收数据的处理函数是在MAVLink的 mavlink_helpers.h:mavlink_parse_char()函数里面实现的。这个函数实际上需要在每次接收到一个字节数据的时候调用它来解析的信息,直到一个完整的数据包被解析完成。

发送数据可以用mavlink_msg_*_pack()这些函数,然后调用mavlink_helpers.h:mavlink_msg_to_send_buffer()进行序列化。同时,为了方便,MAVLink为每一种类型的传输数据都定义了一个函数,例如mavlink_msg_raw_imu_send。想要发送IMU数据调用这个函数即可。

那我们移植需要关系的是这些函数最后是调用什么的底层硬件接口进行真正的数据传送的。其实最后是调用的_mavlink_send_uart(mavlink_channel_t chan, const char *buf, uint16_t len)这个函数。在这个函数里面有2种底层方式进行数据传送:多字节和单字节。我们来实现多字节。

首先,定义宏

#define MAVLINK_USE_CONVENIENCE_FUNCTIONS // 移植必须要设定这个宏,详见代码

#define MAVLINK_SEND_UART_BYTES mavlink_send_uart_bytes //mavlink_send_uart_bytes是我们用户自己需要实现的底层代码。

void mavlink_send_uart_bytes(mavlink_channel_t chan, const uint8_t *ch, int length)

{

HAL_UART_Transmit(&huart8, (uint8_t *)ch, length, 2000);

}

3.到这边基本移植都差不多了。本文在main中做了一个mavlink_test()测试函数用于发数据给上位机,

void mavlink_test(void)

{

static uint16_t test_count=0;

mavlink_message_t lastmsg;

test_count++;

//5hz

if((test_count%100)==0)

{

mavlink_test_heartbeat2(1,1,&lastmsg);

}

if((test_count%50)==0)

{

mavlink_test_raw_imu2(1,1,&lastmsg);

}

}

同时利用ringbuffer接收数据,然后在main中实时解析Loop_Mavlink_Parse()上位机发送过来的数据。

```

void Loop_Mavlink_Parse(void)

{

if(Mavlink_RB_IsOverFlow())

{

Mavlink_RB_Clear();

}

while(Mavlink_RB_HasNew())

{

uint8_t read = Mavlink_RB_Pop();

if(mavlink_parse_char(MAVLINK_COMM_0, read, &msg, &status))

{

//信号处理函数

Mavlink_Msg_Handle(msg);

//printf("Received message with ID %d, sequence: %d from component %d of system %d", msg.msgid, msg.seq, msg.compid, msg.sysid);

}

}

}

```

最后实际测试移植成功。

java mavlink_MAVLink功能开发,移植教程。相关推荐

  1. (java web后端方向)如何让你的简历为你争取到更多的面试机会,内容来自java web轻量级开发面试教程...

    我们在做培训时,会发现一个不合理的情况,一些程序员能力不错,在公司里也是技术牛人,但发出去的简历往往会石沉大海,没有回复.对于刚毕业的大学生或工作年限在2年之内的程序员,这个情况会更严重. 这种情况下 ...

  2. 面试时,当你有权提问时,别客气,这是个逆转的好机会(内容摘自Java Web轻量级开发面试教程)...

    前些天,我在博客园里写了篇文章,如何在面试中介绍自己的项目经验,收获了2千多个点击,这无疑鼓舞了我继续分享的热情,今天我来分享另外一个面试中的甚至可以帮助大家逆转的技巧,本文来是从 java web轻 ...

  3. 根据实践经验,讲述些学习Java web能少走的弯路,内容摘自java web轻量级开发面试教程...

    在和不少比较上进的初级程序员打交道的过程中,我们总结出了一些能帮到合格程序员尽快进阶的经验,从总体上来讲,多学.多实践不吃亏.本文来是从 java web轻量级开发面试教程从摘录的. 1  哪些知识点 ...

  4. java web轻量级开发面试教程内容精粹:哪些简历得不到面试机会

    看到一本较好的实践性比较强的书,java web轻量级开发面试教程,里面的一些内容很有实践意义. 问题点 很难获得面试机会的原因 学历不符,比如要求是本科以上,但学历是大专 学历是硬指标,所以达不到学 ...

  5. java web数据库面试_数据库面试技巧,通过JDBC展示自己专业性,摘自java web轻量级开发面试教程...

    importjava.sql.Connection;2 importjava.sql.DriverManager;3 importjava.sql.ResultSet;4 importjava.sql ...

  6. java清华大学教程_清华大学出版社-图书详情-《Java Web应用开发基础教程》

    目录                                                  ...

  7. Java手机游戏开发简明教程 (SunJava开发者认证程序员 郎锐)

    原文发布时间为:2008-07-30 -- 来源于本人的百度文章 [由搬家工具导入] Java手机游戏开发实例简明教程 (SunJava开发者认证程序员 郎锐) 一.手机游戏编写基础 1.手机游戏设计 ...

  8. java web应用开发渐进教程_Java Web应用开发渐进教程

    第1章 Java Web概述 1.1 HTTP与Web页 1.1.1 HTTP 1.1.2 静态Web页 1.1.3 动态Web页 1.2 Java服务器端开发相关技术 1.2.1 Servlet技术 ...

  9. Java开源企业开发平台教程:待办挂起业务场景实现

    在一些流程场景中,我们希望在流转过程中,对于当前的待办实现挂起操作,不再计算工作时间,等到特定的时间再恢复状态,进行正常的流程时长计算.那么下面就介绍在O2OA中如何实现此功能. 适用版本:5.4及以 ...

最新文章

  1. FPGA 之 VGA的IP核编写
  2. AndFix解析——(上)
  3. JSON Web Token (JWT),服务端信息传输安全解决方案
  4. aptitude 命令_C-命令行参数Aptitude问题与解答
  5. android 触摸防抖,一种触摸屏防抖优化方法、系统及触摸屏终端与流程
  6. 矩阵的Cholesky分解
  7. python面向对象编程指南 脚本之家_Python面向对象编程之继承与多态详解
  8. 考勤排班_考勤管理系统VS传统考勤排班优劣如何?
  9. python环境变量配置_Python零基础入门到年薪二十万-1.1节: 在windows中安装Python
  10. Linux 抄袭 Unix ?今日终有定论!
  11. vue3移动端腾讯地图坐标拾取,获取当前定位(腾讯、高德、百度、天地图),火星坐标GCJ-02–>百度坐标BD-09,根据坐标经纬度计算两点距离的方法,点击链接打开地图导航的方法
  12. 工业上的数控机床所属计算机应用的什么领域,工业上的数控机床所属的计算机应用领域是______。...
  13. OriginPro 2021 设置成中文(软件自带)
  14. QT之QTreeView使用总结
  15. 计算机音乐广东爱情故事,改编自网易云音乐——广东十年爱情故事热评
  16. R语言 第2章 数据对象与数据读写(2)
  17. java.lang.IllegalArgumentException 如何解决这个异常
  18. 【C#上位机】chart动态更新数据
  19. 抖音、快手、B站、小红书,品牌如何选对投放平台?
  20. python-windows安装cuda+cudnn+pytorch

热门文章

  1. 【Pytorch】SGDR
  2. 变压器的工作原理(图解,原理图讲解,一看就懂)
  3. sortable的基本属性
  4. FP6195耐压60V电流降压3.3V5V模块供电方案
  5. 魅蓝5s 显示无服务器,性能充沛 魅蓝5s运行《王者荣耀》无压力通过
  6. 计算机应用可分为哪两类,自考计算机应用基础试题及参考答案
  7. 【原创】IP摄像头技术纵览(六)---通过internet访问摄像头
  8. Data Analysis 软件(色谱质谱图分析软件)安装步骤
  9. mysql模糊查询xml_在userMapper.xml文件中模糊查询的常用的3种方法
  10. 使用reCAPTCHA实现验证码