MAVLink学习之路04_MAVLink移植到STM32具体步骤

发布时间:2024-09-23  

1写在前面

《MAVLink学习之路》前面三篇文章,可以说是一些基础知识,也是为本文做的准备工作(建议初学者先了解前面三篇文章)。

本文主要内容:

MAVLink移植主要步骤

MAVLink移植过程要点

提示:为方便广大初学者朋友尽快掌握MAVLink,我在文末提供MAVLink发送接收例程(基于STM32硬件、MDK-ARM和EWARM开发环境)。

为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,本文章收录于【MAVLink学习之路】,在微信公众号回复【MAVLink学习之路】即可查看。

2

MAVLink移植主要步骤

2.1 移植说明

本文主要针对MAVLink C源代码移植进行讲述。其中,MAVLink的C源代码可以下载网上预生成的C源代码库,也可以通过生成器工具生成。

A.下载预生成C代码库

如果是使用标准MAVLink的MSG消息,则可以现在官方指定地址预先生成的C代码库。预先生成C代码库总共两个版本:

MAVLink V1版:

https://github.com/mavlink/c_library_v1

MAVLink V2版:

https://github.com/mavlink/c_library_v1

(提示:公众号不支持外链接,请复制链接到浏览器打开)

B.生成器生成C代码

如果你需要自定义MSG消息,则需要自己通过工具生成C代码,具体生成方法请参看文章:《MAVLink学习之路03_XML中定义MSG并生成C代码》

提示:

官方预生成C代码库就是通过生成器而生成的,官方提供的生成器工具、预生成C代码库不定期更新。

也就是说可能你不同时期看到的预生成库不同,不同时期的生成器及其生成的代码也有所不同。

如上图,官方预生成的C代码(V1版),与通过生成器生成的代码完全一样。如common.xml通过生成器生成的C代码就和上面紫红色框出来的代码一样。当然,生成器版本也是这最新的才对。

2.2 移植主要步骤

1.下载相关工具

2.环境搭建

3.生成C代码(如果下载官方预生成代码,前面两步可以不用)

4.将C代码添加到工程

5.配置(如添加MAVLink路径、修改代码适配工程)

6.添加MAVLink发送接收(及应用)代码

步骤1, 2, 3已经在前面文章详细讲述了,本文主要讲述步骤4, 5。步骤6下一篇文章详细讲述。

3

MAVLink移植过程要点

本节主要内容讲述将C代码添加到工程,然后配置,到编译没有错误这一过程中的一些重要知识点。

3.1 代码添加到工程

代码添加到工程其实很简单,将代码拷贝工程文件下,类似如下图,添加组,添加源文件。

但是,MAVLink源代码都是.h头文件,可以不用像上面那样添加到工程。当然,添加头文件到工程的好处就是可以快速打开头文件,查找相关代码。

说这一小节是想提示大家:MAVLink的C源代码都是.h头文件。头文件只需要添加对应路径,包含头文件即可(#include 'mavlink.h')。

3.2 配置

1.添加路径

Keil MDK-ARM和IAR EWARM添加路径这项内容我就不在这里详细讲述了,不会的朋友可以参看看我的文章:

Keil MDK-ARM系列教程(一)_新建软件工程详细过程

IAR EWARM系列教程(一)_新建软件工程详细过程

3.3 修改代码

这小节内容可以参看网上一篇博文:

https://www.cnblogs.com/lovechen/p/5809709.html

那篇文章讲述的很多,我讲一下重点:它修改的代码是针对老版本主要需要修改两个地方。

而且新版本MAVLink生成器已经优化了一个项,也就是只有一个地方需要修改:修改mavlink_types.h.

1.针对Keil MDK-ARM

2.针对IAR EWARM

替换代码:#define MAVPACKED( __Declaration__ ) __Declaration__

那篇文章针对的是老版MAVLink还需要修改一个const的地方,我这里就不说了(新来的建议用新版的)。

为什么这里要修改呢?

原因在于编译器的差异导致的。

3.4 补充知识点

1.#pragma anon_unions

keil中默认是不支持匿名结构体的,需要编译指令#pragma anon_unions指名。

2.MAVPACKED

如果不修改代码,直接编译,发现有许多错误,原因都来自MAVPACKED。结合修改的内容,再看下图,有什么启发没有。

4

源代码下载

地址:

https://pan.baidu.com/s/1xraErAnmL-BN9CMwE6aQ-A

密码:cusq


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>