说明:

本文原创作者『strongerHuang

首发于微信公众号『嵌入式专栏』,同时也更新在我的个人网站:EmbeddedDevelop

一、写在前面

前面写的几篇文章你掌握了,说明你离成功很近了。那么本文就带你真正进入编程的世界,让你进一步掌握MAVLink应用编程的重要知识点。

本文主要内容:

·MAVLink应用编程主要内容

·MAVLink函数接口详细说明

提示:本文结合上一篇文章提供给大家下载的“MAVLink发送接收例程”进行讲解,请结合例程理解本文。

二、MAVLink应用编程主要内容

2.1 发送和接收说明

利用MAVLink通信协议进行编程,主要实现的功能就是:

1.发送端

将需要发送的数据(如:SysState, BatVol),添加MAVLink通信协议,通过硬件(如:UART、CAN)发送出去。

2.接收端

硬件(如:UART、CAN)接收到的数据,通过MAVLink协议解析,得到一帧完整的MAVLink数据包,提取发送端发送的数据(如:SysState, BatVol),将得到的数据应用到我们程序中。

主要流程:数据 -> MAVLink封装 -> 发送 -> 接收 -> MAVLink解析 ->数据

2.2 发送和接收流程图

该流程图是结合我上一篇文章提供的源代码例程画出来,包含的只是主要内容,更多细节没有在流程图中呈现。

提示: 我提供例程是针对初学者提供比较单一发送和接收例程(MDK-ARM和EWARM包含各自的发送和接收工程)。

而实际项目可能会:

1.发送和接收在一个工程;

2.包含操作系统;

3.发送、接收数据FIFO(队列)处理;

所以,实际项目,请按需修改我提供的源码。

三、MAVLink函数接口详细说明

这一章节讲述发送和接收主要用到的函数接口,请参考我提供的源代码例程理解。 为方便初学者理解,我将其分为发送和接收两个部分来讲述。

3.1 发送主要函数接口

上面是我提供例程的代码,主要讲4个接口。

1.MAVLink_SendTest

这个接口是根据自己情况进行封装函数,用于应用程序调用,这里不多说。

2.mavlink_msg_sys_info_pack

这个函数接口主要目的:将变量信息(SysID、CompID、SysState、BatVol)打包,最终得到MAVLink_Msg这个消息包。

3.mavlink_msg_to_send_buffer

将上一步得到的MAVLink_Msg转换成我们要发送的数据BUF缓存。

4.MAV_USART_SendNByte

这个函数接口也是我自己根据硬件(UART)封装的,如果你是其它硬件通信,只需要封装一个类似的接口(参数具有BUF,LEN)即可。

发送数据的流程:从应用代码 -> 底层硬件(发送出去)。

如果要深入了解,可以先熟悉软件流程,再结合源代码工程,同时参看接口函数具体实现。相信你很快就明白了。

3.2 接收主要函数接口

上面是我提供例程的代码(方便截图,去掉了部分),主要讲以上4点内容。

1.MAV_USART_GetByte

该函数接口也是硬件底层通信接口,请根据自己情况修改,只需要传递数据(流)进来即可。

2.mavlink_parse_char

MAVLink解析是按照一个一个字符进行解析,我们接收到一个字符,就对其进行解析,直到解析完(根据返回标志判断)一帧数据为止。

3.if(MAVLINK_MSG_ID_SYS_INFO == MAVLinkMsg.msgid)

这里就是对解析好的一包完整消息进行分类判断吧。其实,我是想说,这个地方还有两个ID需要进行判断,SysID系统ID和CompID部件ID。

我提供例程为方便初学者快速理解,未提供SysID和CompID判断,在后续应用编程中会用到。

4.mavlink_msg_sys_info_get_voltage_battery

通过该接口获取消息变量,看图中说明文字,前面是消息,后面是消息变量。

接收数据的流程:从应用代码 -> 底层硬件(发送出去)。

以上就是发送和接收的主要函数接口,如果你只是简单的进行通信,这几个接口就够你使用了。当然,更高级的编程应用还需要你进一步掌握其中的内容。

四、说明

1.该文档仅供个人学习使用,版权所有,禁止商用。

2.本文由我一个人编辑并整理,难免存在一些错误。

3.为了方便大家平时公交、地铁、外出办事也能用手机随时随地查看该教程,该教程同步更新于微信公众号『嵌入式专栏』,关注微信公众号回复【MAVLink学习之路】即可查看全系列教程。

五、最后

我的博客:http://www.strongerhuang.com

我的GitHub:https://github.com/EmbeddedDevelop

我的微信公众号(ID:strongerHuang)还在分享STM8、STM32、Keil、IAR、FreeRTOS、UCOS、RT-Thread、CANOpen、Modbus...等更多精彩内容,如果想查看更多内容,可以关注我的微信公众号『strongerHuang』。

mavlink协议_MAVLink学习之路05_MAVLink应用编程接口分析相关推荐

  1. mavlink协议_MAVLink学习之路03_XML中定义MSG并生成C代码

    说明: 本文原创作者『strongerHuang』 首发于微信公众号『嵌入式专栏』,同时也更新在我的个人网站:EmbeddedDevelop 一.写在前面 如果你前面两篇文章掌握了,说明你已经入门了. ...

  2. mavlink协议详解_MAVLink学习之路05_ MAVLink应用编程接口分析

    描述 MAVLink应用编程主要内容 2.1 发送和接收说明 利用MAVLink通信协议进行编程,主要实现的功能就是: 1.发送端 将需要发送的数据(如:SysState, BatVol),添加MAV ...

  3. 小白学习之路,网络编程(上)

    一,计算机网络基础 在讲网络编程之前,先跟大家简单的介绍一下一些网络相关的知识. 在最早之前,两台电脑之间通信是通过电脑的mac地址找到对方,并实现相互通信.当然每台电脑都只存在唯一的mac地址,在生 ...

  4. Java学习之路12——GUI编程

    组件:窗口.弹窗.面板.文本框.列表框.按钮.图片.监听事件.鼠标.键盘事件 一.简介 GUI的核心开发技术:Swing AWT. 弊端: 页面不美观 需要jre环境 学习的必要性 可以写出自己心中想 ...

  5. python支持多种编程范式吗_Python3学习之路~6.1 编程范式:面向过程 VS 面向对象...

    编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种 ...

  6. Java学习之路002——面向对象编程

    [说明]部分内容来源于网络,如有冲突,请联系作者删除. 一.面向对象编程(OOP) 2.1 对象和类的关系 2.2 面向对象的特征 2.2.1 封装 2.2.2 继承 2.2.3 多态 3.抽象 使用 ...

  7. FPGA学习之路—接口(2)—I2C协议详解+Verilog源码分析

    FPGA学习之路--I2C协议详解+Verilog源码分析 定义 I2C Bus(Inter-Integrated Circuit Bus) 最早是由Philips半导体(现被NXP收购)开发的两线时 ...

  8. h5获取http请求头_java学习之路(2),http协议,request类

    java学习之路(2),http协议,request类 java学习之路(2),http协议,request类 1.一个httpServlet的多个地址定义 对于httpServlet可以定义一个数组 ...

  9. alin的学习之路(Linux网络编程:十)(http协议,BS模型)

    alin的学习之路(Linux网络编程:十)(http协议,BS模型) 需求:使用B/S模型来访问主机中的文件(包括目录) 0. B/S 模型 注意事项 1. 浏览器请求ico ​ 准备一个favic ...

最新文章

  1. 服务器修改mime类型,服务器上设置mime类型
  2. Android系统Google Maps开发实例浅析
  3. Struts2新特性
  4. NetBeans 时事通讯(刊号 # 27 - Sep 24, 2008)
  5. Linux基础——linux和gcc的介绍
  6. Scanner类的基本总结
  7. genius choice for gopro
  8. 疫情之下,将业务迁移至云端会是一个正确的选择吗?
  9. 已知两点坐标如何快速增加其他坐标_从0开发工程测绘大师小程序之坐标正算篇(十一)...
  10. Bootstrap中的下拉列表
  11. 首次!华人获世界科学奖,其海洋蓝色能源技术或解决世界能源需求
  12. 树言树语:AIR的 应用方向在哪里?
  13. 精通Android自定义View(九)绘制篇Canvas分析之绘制图片
  14. iconfont阿里巴巴矢量图标库使用步骤
  15. 安卓屏幕朗读app_安卓车机后装苹果CarPlay盒子的自动化分享
  16. 【马克思主义基本原理】--导论
  17. 心上莲花:佛教简介(上)
  18. win10共享打印机出现操作无法完成(错误0x00000709)解决办法
  19. 云服务器带宽是什么 云服务器带宽怎么选
  20. CSS——制作三角形

热门文章

  1. ipv6的地址格式 和 常用地址
  2. 怎样修改谷歌浏览器的默认下载工具为迅雷?
  3. websocket+php socket实现聊天室
  4. 大话设计模式(下载)
  5. java敏感词过滤器组件
  6. “共轭”(conjugate)是什么意思?
  7. 可悲的智人類。  文/奧斯·科特林
  8. 一行 Java 代码是怎么执行的。
  9. 土建翻模【梁转化】功能,CAD识别批量梁生成
  10. 树莓派远程控制(kali)