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
    +关注

    关注

    2312

    文章

    11189

    浏览量

    374515
  • C代码
    +关注

    关注

    1

    文章

    90

    浏览量

    15224
  • mavlink
    +关注

    关注

    0

    文章

    9

    浏览量

    2777
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    驱动之路#20:Pinctrl 在手,引脚复用很顺手

     欢迎关注,每周更新!☞ 本合集分享的是,我当初学习Linux驱动的来时路——《《驱动之路》开篇:自序pinctrl节点下(rk3576-pinctrl.dtsi),定义具体的引脚配置(复用
    的头像 发表于 04-07 21:18 444次阅读
    驱动<b class='flag-5'>之路</b>#20:Pinctrl 在手,引脚复用很顺手

    消费电子EMC整改:被动应对主动防御的技术进阶之路

    消费电子EMC整改:被动应对主动防御的技术进阶之路|南柯电子
    的头像 发表于 12-15 10:12 512次阅读

    什么样的智能才能称为身智能?

    节目中抛个手绢,走路还磕磕绊绊,不到一年,就已经发展接近真人的步伐,身智能时代或许真的来了! 为什么身体对智能很重要 身智能,说白了就是有身体、会动、会感知的智能。相较于只能在
    的头像 发表于 11-19 09:29 919次阅读
    什么样的智能<b class='flag-5'>体</b>才能称为<b class='flag-5'>具</b>身智能?

    如何在Vivado上仿真蜂鸟SOC,仿真NucleiStudio编译好的程序

    如标题所示,我们分享如何在Vivado上仿真蜂鸟SOC,仿真NucleiStudio编译好的程序 具体步骤 1. 将蜂鸟soc移植Vivado 只要将端口映射好,注意配置好时钟和bank
    发表于 10-21 11:08

    确定谐波检测设备核心误差要求的步骤有哪些?

    ≤±0.3%、基波误差≤±0.1%)。以下是具体步骤,含每步的目标、操作与输出: 步骤 1:拆解场景核心需求 —— 明确 “误差要求服务的目标” 目标 :厘清场景的核心诉求,避免无依据设定误差(如仲裁场景需高精度,排查场景可放宽)。
    的头像 发表于 10-13 17:23 689次阅读

    数据滤波算法的具体实现步骤是怎样的?

    (高频电磁、瞬时脉冲等),选择适配的滤波算法并落地。以下以电能质量监测中最常用的 IIR 低通滤波(抗高频干扰)、滑动平均滤波(抗瞬时脉冲)、卡尔曼滤波(抗动态波动) 为例,详解具体实现步骤: 一、前置准备:明确滤波目标与硬件基
    的头像 发表于 10-10 16:45 995次阅读

    请问STM32如何移植Audio框架?

    最近在学习音频解码,想用一下Audio框架。 1、这个该如何移植自己创建的BSP并对接到device框架中?看了官方移植文档没有对没有对该部分的描述。 2、我只想实现一个简单的播放功
    发表于 09-25 07:17

    嵌入式工程师的进阶之路

    嵌入式工程师的进阶之路 (一)初级工程师(0-3 年)核心技能: 单片机开发:STM32F103系列 GPIO/USART/SPI 外设驱动,能完成 LED 呼吸灯、按键检测、串口通信等基础项目
    发表于 08-13 11:08

    铝丝键合的具体步骤

    铝丝键合常借助超声楔焊技术,通过超声能量实现铝丝与焊盘的直接键合。由于键合所用劈刀工具头为楔形,使得键合点两端同样呈楔形,因而该技术也被叫做楔形压焊。超声焊工艺较为复杂,键合劈刀的运动、线夹动作,以及工艺参数的施加时序,需相互协同配合,才能完成单根铝丝的键合过程。在此过程中,劈刀作为传递超声波功率、压力等关键工艺参数的媒介,其运动轨迹还对线弧的形状起着决定性作用。
    的头像 发表于 07-16 16:58 2080次阅读

    机智云配网教程第三期:单片机代码移植实战

    前言本篇文章将分享单片机移植的经验。可以下载并按步骤移植,也可以直接使用已移植好的工程文件。文中将介绍我在移植过程中遇到的问题,并提供解决方
    的头像 发表于 07-01 17:32 2085次阅读
    机智云配网教程第三期:单片机代码<b class='flag-5'>移植</b>实战

    开疆智能Devicenet转ModbusTCP网关连接费斯托阀岛配置案例

    本案例是ModbusTCP主站PLC通过开疆智能研发的Devicenet主转ModbusTCP网关连接费斯托阀岛的配置案例,具体步骤如下。
    的头像 发表于 06-28 14:10 1175次阅读
    开疆智能Devicenet转ModbusTCP网关连接费斯托阀岛配置案例

    STM32与机智云连接实现步骤与技巧(下篇):机智云代码移植与优化

    在《STM32与机智云连接实现步骤与技巧(上篇)》中,我们介绍了硬件连接和通信协议配置。本篇将重点讲解如何将机智云相关代码移植STM32
    的头像 发表于 05-23 18:10 1312次阅读
    <b class='flag-5'>STM32</b>与机智云连接实现<b class='flag-5'>步骤</b>与技巧(下篇):机智云代码<b class='flag-5'>移植</b>与优化

    STM32与机智云连接实现步骤与技巧(上篇)

    通过STM32与机智云的连接,开发者可以实现设备的远程控制和数据管理,提升物联网应用的智能化水平。本文将介绍STM32与机智云连接的具体步骤,涵盖硬件连接、通信协议配置、数据传输及云平台应用开发等
    的头像 发表于 05-23 18:10 1340次阅读
    <b class='flag-5'>STM32</b>与机智云连接实现<b class='flag-5'>步骤</b>与技巧(上篇)

    零死角玩转STM32——系统篇

    ,从裸奔系统,让您零死角玩转 STM32。 目录内容: 1、官方源代码介绍 2、重要文件代码详解 3、uC/OS-II 移植 STM32
    发表于 05-21 14:08

    打开FSP配置器界面的具体步骤

    如果目标工程项目是新建的项目,可以直接编译并通过。但是若是新导入的项目,需要先打开FSP配置界面重新生成FSP库相关代码,然后再进行编译,否则会提示编译错误。具体步骤如下。
    的头像 发表于 05-06 15:58 2154次阅读
    打开FSP配置器界面的<b class='flag-5'>具体步骤</b>