0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-07 16:22 次阅读

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2266

    文章

    10871

    浏览量

    354782
  • C代码
    +关注

    关注

    1

    文章

    89

    浏览量

    14287
  • mavlink
    +关注

    关注

    0

    文章

    8

    浏览量

    2586
收藏 人收藏

    评论

    相关推荐

    身智能与机器学习的关系

    身智能(Embodied Intelligence)和机器学习(Machine Learning)是人工智能领域的两个重要概念,它们之间存在着密切的关系。 1. 身智能的定义
    的头像 发表于 10-27 10:33 268次阅读

    【GD32 MCU 移植教程】10、从STM32F030系列移植GD32E230系列

    GD32E230 对比 STM32F030 有着很好的兼容性和更高的性价比,内核和外设都有所增强。本人曾做过产品的 MCU 替换,将基于 STM32F0xx 1.5.0 固件库的应用程序移植
    的头像 发表于 09-07 10:24 525次阅读
    【GD32 MCU <b class='flag-5'>移植</b>教程】10、从<b class='flag-5'>STM32</b>F030系列<b class='flag-5'>移植</b><b class='flag-5'>到</b>GD32E230系列

    【GD32 MCU 移植教程】9、从 STM32F10x 系列移植 GD32F30x 系列

    对比、外设及性能对比以及从 STM32F10x 移植 GD32F30x 的移植步骤,旨在让开发者能够快速从
    的头像 发表于 09-07 09:57 518次阅读
    【GD32 MCU <b class='flag-5'>移植</b>教程】9、从 <b class='flag-5'>STM32</b>F10x 系列<b class='flag-5'>移植</b><b class='flag-5'>到</b> GD32F30x 系列

    【GD32 MCU 移植教程】8、从 STM32F4xx 系列移植 GD32F4xx 系

    、外设及性能对比以及从 STM32F4xx 移植 GD32F4xx 的移植步骤,旨在让开发者能够快速从
    的头像 发表于 09-06 09:40 970次阅读
    【GD32 MCU <b class='flag-5'>移植</b>教程】8、从 <b class='flag-5'>STM32</b>F4xx 系列<b class='flag-5'>移植</b><b class='flag-5'>到</b> GD32F4xx 系

    聚徽-LED 全彩屏的安装和调试步骤是什么

    LED 全彩屏的安装和调试步骤涉及多个环节,以下是根据搜索结果整理的具体步骤
    的头像 发表于 09-03 09:24 323次阅读

    将ADF移植RTOS上大概都需要哪些步骤?一般移植周期多久呢?

    1 ADF是免费的开源软件吗? 2 将ADF移植RTOS上大概都需要哪些步骤?一般移植周期多久呢?
    发表于 06-28 08:03

    STM32WB配置SMPS模块具体步骤是什么?

    想要降低STM32WB的功耗,查找手册发现开启SMPS模块可以降低功耗。配置SMPS模块具体步骤是什么有大佬知道吗?是开启SMPS宏定义,然后写PWR的寄存器就可以了吗?怎么证明自己的SMPS模块-配置正确了呢?
    发表于 03-20 08:18

    STM32F4的裸机源码可以移植linux ARM上运行吗? 具体需要怎么实现呢?

    STM32F4的裸机源码可以移植linux ARM开发板上运行吗? 具体需要怎么实现呢?
    发表于 03-20 07:00

    STM32高手进阶之路与实用学习步骤

    CPU是相通的,相信大部分的同学都学习过单片机,是有一定基础的。如果你碰到问题,去尝试了,自己把问题解决了,你会很有成就感!
    的头像 发表于 03-13 09:38 562次阅读

    MAVLink在应用编程中的编程原理和思路

    嵌入式开发过程中,UART、 CAN、 USB等通信基本离不开通信协议。 下面给大家分享一种通信协议(MAVLink)在应用编程中的编程原理和思路。
    发表于 03-08 12:45 793次阅读
    <b class='flag-5'>MAVLink</b>在应用编程中的编程原理和思路

    stm32必须要移植系统吗

    电子等。在使用STM32进行开发时,是否需要进行系统移植是一个常见的问题。 系统移植是指将操作系统或者驱动程序从一个硬件平台移植另一个硬件
    的头像 发表于 01-08 14:17 820次阅读

    stm32移植ucos iii教程

    µC/OS-III是一个实时操作系统,广泛应用于嵌入式系统开发中。在STM32系列微控制器上移植µC/OS-III可以充分发挥其实时性和多任务处理能力。本篇文章将为您提供一个详实、细致的STM32
    的头像 发表于 01-02 16:29 1373次阅读

    移植 SBSFU STM32G070 的过程

    电子发烧友网站提供《移植 SBSFU STM32G070 的过程.pdf》资料免费下载
    发表于 12-18 11:04 4次下载
    <b class='flag-5'>移植</b> SBSFU <b class='flag-5'>到</b> <b class='flag-5'>STM32</b>G070 的过程

    实战经验 | 移植 SBSFU STM32G070 的过程

    关键词:SBSFU,移植 目录预览 1、前言 2、基于STM32G070和STM32G071的SBSFU 实现差异 3、开始移植 4、测试安全保护特性 5、后述 01 前言 客户
    的头像 发表于 12-08 18:20 829次阅读

    关于AD5940移植其他单片机上的问题求解

    与NRF52840单片机是否兼容? 2、AD5940在SPI读/写之前是否需要一些特殊的配置,具体步骤是什么? 3、官方网站上的代码是否都是正确的,可以使用的? 4、如果我想把AD5940单独移植到我的单片机上作为它的一部分,具体
    发表于 12-01 06:05