分享一种通信协议的应用编程原理和思路

2023-05-16

已剪辑自: https://mp.weixin.qq.com/s/wy-flva6pCNqHV3ObeLPCQ

嵌入式开发过程中,UART、 CAN、 USB等通信基本离不开通信协议。
下面给大家分享一种通信协议(MAVLink)在应用编程中的编程原理和思路。
本节提供“MAVLink发送接收例程”例程下载地址:

地址:

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

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

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

1.发送端

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

2.接收端

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

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

2.发送和接收流程图

图片

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

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

而实际项目可能会

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

**2.**包含操作系统;

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

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

MAVLink函数接口详细说明

这一章节讲述发送和接收主要用到的函数接口,请参考我提供的源代码例程理解。

为方便初学者理解,我将其分为发送和接收两个部分来讲述。
1. 发送主要函数接口[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GQ8i6RVy-1671461450554)(https://mmbiz.qpic.cn/mmbiz_png/HOd0CyicIq1BeVV2QIhWFBXI7R1444lIgbX7p0gczWMSAuQUPhlhwlH8lx2FPDMhr8D1kdXib2lufnEFiamTjeEzA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=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)即可。

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

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

2.接收主要函数接口

图片上面是我提供例程的代码(方便截图,去掉了部分),主要讲以上4点内容。
1.MAV_USART_GetByte该函数接口也是硬件底层通信接口,请根据自己情况修改,只需要传递数据(流)进来即可。
2.mavlink_parse_charMAVLink解析是按照一个一个字符进行解析,我们接收到一个字符,就对其进行解析,直到解析完(根据返回标志判断)一帧数据为止。
**3.if(MAVLINK_MSG_ID_SYS_INFO == MAVLinkMsg.msgid)**这里就是对解析好的一包完整消息进行分类判断吧。其实,我是想说,这个地方还有两个ID需要进行判断,SysID系统ID和CompID部件ID。
我提供例程为方便初学者快速理解,未提供SysID和CompID判断,在后续应用编程中会用到。
4.mavlink_msg_sys_info_get_voltage_battery通过该接口获取消息变量,看图中说明文字,前面是消息,后面是消息变量
接收数据的流程:从底层硬件(接收数据) -> 应用代码。
以上就是发送和接收的主要函数接口,如果你只是简单的进行通信,这几个接口就够你使用了。当然,更高级的编程应用还需要你进一步掌握其中的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分享一种通信协议的应用编程原理和思路 的相关文章

  • 基于UDP的服务器端和客户端

    文章目录 再谈UDP和TCP基于UDP的服务器端和客户端UDP中的服务器端和客户端没有连接UDP服务器端和客户端均只需1个套接字基于UDP的接收和发送函数基于UDP的回声服务器端 客户端 再谈UDP和TCP 已剪辑自 http c bian
  • Windows下的socket演示程序及加载DLL

    Windows下的socket演示程序 已剪辑自 http c biancheng net view 2129 html 上节演示了 Linux 下的 socket 程序 xff0c 这节来看一下 Windows 下的 socket 程序
  • QT文件操作

    文章目录 QFile文件操作QFile 43 QTextStreamQFile 43 QDataStream 已剪辑自 http c biancheng net view 9430 html 很多应用程序都需要具备操作文件的能力 xff0c
  • C语言文件操作

    文章目录 C语言文件操作C语言中的文件是什么 xff1f 文件流 C语言fopen函数的用法 xff0c C语言打开文件详解fopen 函数的返回值判断文件是否打开成功 fopen 函数的打开方式关闭文件实例演示 文本文件和二进制文件到底有
  • Chapter-3_概率分布

    Chapter 3 概率分布 本文内容摘自 xff1a https seeing theory brown edu probability distributions cn html 概率分布描述了随机变量取值的规律 1 随机变量 随机变量
  • C++文件操作

    文章目录 计算机文件到底是什么 xff08 通俗易懂 xff09 xff1f C 43 43 文件类 xff08 文件流类 xff09 及用法详解C 43 43 open 打开文件 xff08 含打开模式一览表 xff09 使用 open
  • C语言文件操作、C++文件操作、QT文件操作汇总及对比分析

    前面对C语言文件操作 C 43 43 文件操作 QT文件操作进行了比较详细的说明 xff0c 文章链接如下 C语言文件操作 C 43 43 文件操作 QT文件操作 通过大致的了解 xff0c 我们知道C语言文件操作 C 43 43 文件操作
  • 破茧化蝶,从Ring Bus到Mesh网络,CPU片内总线的进化之路

    文章目录 为什么需要片内总线 xff1f 星型连接 环形总线 xff08 Ring Bus xff09 Mesh网络 结论 转载于 xff1a https zhuanlan zhihu com p 32216294 在大多数普通用户眼里 x
  • 片内总线在cpu扮演什么角色?他为什么能实现高效,不同的CPU为什么采用不同的总线协议?

    文章目录 各种新型片上总线维度 xff08 Degree xff09 跳 xff08 Hop xff09 和跳数 xff08 Hop Count xff0c HC xff09 直连拓扑和路由器 Intel的Ring和Mesh 43 总线双R
  • 如何一步一步成为一个技术领域专家

    已剪辑自 https mp weixin qq com s biz 61 Mzg4NjIxODk4Mg 61 61 amp mid 61 2247497216 amp idx 61 1 amp sn 61 12c8b2449baa2c236
  • 电子电气架构设计需要考虑哪些方面?

    当前车辆日益复杂 xff0c 车联网功能在各个细分领域都在不断增加 xff0c 而更强大的智能功能也逐步增加 所有这些高级功能都依赖于线束和控制器才能发挥作用 然而面对日益增加的车辆复杂性和产品开发周期缩短的压力 xff0c 导致汽车制造商
  • 深度解读汽车域控制器

    已剪辑自 https mp weixin qq com s biz 61 Mzg4NjIxODk4Mg 61 61 amp mid 61 2247496089 amp idx 61 1 amp sn 61 db5c08f97342decfa
  • 单片机硬件和软件延时、RTOS相对延时和绝对延时

    已剪辑自 https mp weixin qq com s RPLQn4KO9Aqu1fpfZeOKA 前不久有个读者在问关于延时的问题 xff0c 大概就是问 xff1a 软件延时和硬件延时是啥意思 xff1f 做项目时他俩有什么区别 x
  • 计算机端口的安全知识大全,整的明明白白!

    已剪辑自 https cloud tencent com developer article 1406267 看了网安众安的这篇计算机端口文章 xff0c 你要是学不会你来打我 鲁迅没有说过 端口是计算机的大门 xff0c 计算机的安全应该
  • 自然语言处理概述

    文章目录 本文系书稿选登 2 1 自然语言处理概述2 1 1 什么是自然语言处理2 1 2 自然语言处理的任务 已剪辑自 https mp weixin qq com s hSTkA2ffa1YWCoZOgQdrBQ 本文系书稿选登 2 1
  • Ubuntu安装JLink_Linux_V434a & eclipse for c/c++

    按照网上说法 xff1a 由于ubuntu电脑使用usb口来连接Jlink 因此首先要安装usb的库 使用apt get install libusb命令无法定位到libusb软件 xff0c 于是 下载并安装 http sourcefor
  • 详解C语言二级指针三种内存模型

    已剪辑自 https mp weixin qq com s LRMjzIYIVPs6x6ja5ffp w 二级指针相对于一级指针 xff0c 显得更难 xff0c 难在于指针和数组的混合 xff0c 定义不同类型的二级指针 xff0c 在使
  • 可参考的通信数据接收解析方法

    已剪辑自 https mp weixin qq com s ZwAlQv1wV4M3ivCv4wKakw 前阵子一朋友使用单片机与某外设进行通信时 xff0c 外设返回的是一堆格式如下的数据 xff1a AA AA 04 80 02 00
  • 嵌入式软件测试怎么实现自动化测试?

    我是做嵌入式自动化测试的 xff0c 我来回答下吧 题主你的表达有点混乱 xff0c 我挑出来三个问题 xff1a 1 希望做测试做的高大上 2 不用手工这么累 3 测试做出能看到前景 我也做测试 xff0c 虽然自以为也不很高大上 第一个
  • 嵌入式软件自动化测试方法

随机推荐

  • STM32 | hex文件、bin文件、axf文件的区别?

    已剪辑自 https mp weixin qq com s 1EQRooYYpDeKvHpqguik6w 在STM32开发中 xff0c 经常会碰到hex文件 bin文件与axf文件 xff0c 这些都是可以烧写到板子里运行的文件 这三个文
  • 嵌入式 C 语言进阶小技巧,弱符号和弱引用

    已剪辑自 https mp weixin qq com s 7gBn4CB PwiJBfM0v57 xA 我是老温 xff0c 一名热爱学习的嵌入式工程师 关注我 xff0c 一起变得更加优秀 xff01 工程师老温 xff
  • 单片机开发中,传感器的数据处理算法

    已剪辑自 https mp weixin qq com s Yy7ysMXoeokW2g yaqsw3w 在传感器使用中 xff0c 我们常常需要对传感器数据进行各种整理 xff0c 让应用获得更好的效果 xff0c 以下介绍几种常用的简单
  • 功能安全软件架构

    已剪辑自 https mp weixin qq com s pCenGTqg2Xi t7b8ebNHMA 1 E GAS 安全架构思想 汽车功能安全旨在把电子电气系统失效而导致的人身危害风险控制在合理范围内 下图是常见的电子电气系统硬件构成
  • 代码是如何控制硬件的?

    简单来说 xff0c 就是软件指令通过操作寄存器 xff0c 控制与 或 非门搭建的芯片电路 xff0c 产生 保存高低电平信号 xff0c 实现相应的逻辑 xff0c 最终通过IO 串口等输出 要想更清楚的了解软件控制硬件的原理 xff0
  • Windows下的TCP/UDP网络调试工具-NetAssist以及Linux下的nc网络调试工具

    已剪辑自 https blog csdn net ccf19881030 article details 109370384 一 Windows下的网络调试工具 NetAssist 1 TCP服务端和客户端测试2 UDP服务端和客户端测试
  • 软件产品化

    1 产品化定义 xff1a 软件产品化是指客户无需为软件添加或调整代码和语句即能完成软件的安装配置 应用初始化 系统管理 用户使用的全过程 xff0c 并且软件至少能满足80 以上的用户某一组应用需求 微软Office或杀毒软件就是产品化软
  • 使用Dev C++进行Windows socket网络编程,需链接lws2_32库

    背景 在我们使用Dev C 43 43 进行C语言编程时 xff0c 如果我们引入的库是C语言标准库 xff0c 那我们是不要在编译器选项中进行额外的设置的 xff0c 但是如果我们使用的是一些不是C语言标准库 xff0c 那我们可能就需要
  • Windows下C语言程序和网络调试助手通信

    网络调试助手之间进行UDP通信 前面一篇文章介绍了Windows下的网络调试助手 xff0c 文章链接如下 xff1a Windows下的TCP UDP网络调试工具 NetAssist以及Linux下的nc网络调试工具 下面我们简单介绍一下
  • 为什么char a[]的a不能用a=“hello”来赋值?

    问题 char b里面的b是一个指向char的指针 xff0c 而b可以用b 61 hello 来复制 同样 xff0c a代表char数组的第一个元素的指针 xff0c 类型应该也是char xff0c 为什么b可以直接用赋值符号而a不可
  • Windows下使用C语言创建定时器并周期和网络调试助手通信

    在Windows C下采用timeSetEvent函数来设置定时器 关于timeSetEvent的函数原型及注释如下所示 xff1a MMRESULT span class token function timeSetEvent span
  • GCC编译程序如何减少堆栈空间的大小?

    1 静态堆空间的大小是编译期可以根据你的全局变量 静态变量尺寸算出来的 因此减少后者的长度可以减少你使用堆空间 2 MCU裸片程序 xff0c 很多环境是不方便 xff0c 不支持 xff0c 不鼓励使用malloc函数的 xff0c 裸环
  • 腾讯毕业十多年了

    已剪辑自 https mp weixin qq com s rb5aeIDQ5 qtifeoeIrqZw 昨天一个腾讯前同事加了我的微信找我聊天 xff0c 说是在网上看见我写的文章想起我了 这个同事印象中很沉默寡言的 xff0c 在腾讯除
  • ARM9和STM32什么关系?

    已剪辑自 https mp weixin qq com s QHARY D2SwFoQbFsJoCNlg 有小伙伴问 xff1a ARM9和STM32什么关系 xff1f 如果时间倒退10年 xff0c ARM9 s3c2410还算是比较流
  • 汽车ECU通信相关验证项有哪些?

    已剪辑自 https mp weixin qq com s fIAXkS37r6jvnuA7yIQDA 汽车电子的高速发展决定了基础软件所面临的要求将会更加严格 xff0c 其要求会覆盖软件的安全性 稳定性 可扩展性等方方面面 为了提高软件
  • 不可忽视的 C 语言陷阱!

    已剪辑自 https mp weixin qq com s bdGuOjz1Cg3YXHwlVh5ZlA 语言是编程的基石 xff0c C语言诡异且有种种陷阱和缺陷 xff0c 需要程序员多年历练才能达到较为完善的地步 虽然有众多书籍 杂志
  • 程序员能纯靠技术渡过中年危机吗?

    首先说答案 xff0c 能 xff01 程序员可以靠技术渡过中年危机 xff0c 但是要转变线性思维 先说说个人情况 xff0c 80后 xff0c 从事电机控制软件开发十余年 xff0c 属于制造业 xff0c 算嵌入式的一个小分支 xf
  • STM32学习(一)

    单片机基础 CISC和RISC举例 冯 诺依曼结构VS哈佛结构 冯 诺依曼结构数据和程序存储在同一存储器中 xff0c 访问数据时不能访问程序 xff0c 访问程序时不能访问数据 xff0c 属于分时复用 xff0c 同一时间只能读取其中一
  • C语言既然可以自动为变量分配内存,为什么还要用动态分配内存呢?

    已剪辑自 https mp weixin qq com s NRyM5KAm jrBImmkA2WYSA 不知道大家在学习C语言动态分配内存的时候 xff0c 有没有过这样的疑问 xff1a 既然系统可以自动帮我们分配内存 xff0c 为什
  • 分享一种通信协议的应用编程原理和思路

    已剪辑自 https mp weixin qq com s wy flva6pCNqHV3ObeLPCQ 嵌入式开发过程中 xff0c UART CAN USB等通信基本离不开通信协议 下面给大家分享一种通信协议 xff08 MAVLink