本文共 936 字,大约阅读时间需要 3 分钟。
摘自:
2020-02-25 12:57:46 376
分类专栏:
版权
MAVLINK现分为两个版本V1和V2,区别是V2的MsgId扩展到24位,V1只有8位(0-255)。原理都是差不多的,这里以V1为例,V2也实际测试过,可以用。一、安装移植 这里不过多解释,官网步骤很详细,需要注意的是,安装前先安装好Python3环境和Git,方法百度都有。另外我们需要的是C代码(移植到stm32上),官方用Python脚本写了个代码生成器(GUI),需要在这个脚本的当前目录下运行脚本,python mavgenerate.py XML路径:F:\mavlink\mavlink\message_definitions\v1.0\common.xml 输出路径任意 语言C语言 协议1.0 然后把这些头文件都复制到STM32串口工程里,在main.c里面#include"mavlink.h", 编译后会报错,找到mavlink_types.h,找到如下部分,改动后如下: 然后添加一句#pragma anon_unions 至此,移植完毕。
二、发送接收
发送:
发送流程三步走: 1,先打包(pack),将所有东西打包成msg 2,将msg转换成发送buff 3,调用底层发送函数(自己实现),发送buff接收:
这里我用的串口空闲中断,当接收完一帧数据后,串口空闲中断产生,Rxcplt置1,然后主循环中判断Rxcplt 当主函数检测到接收一帧数据后,开始调用mavlink_parse_char解析,将字符RX_BUF[i]解析成msg,如果解析结果为MAVLINK_FRAMING_OK,调用handle_message(&r_msg)处理这条消息 测试效果: MCU发送心跳包和压力包到电脑: 心跳包:FE 09 00 14 C8 00 01 00 00 00 00 00 00 03 03 B8 9E 压力包:FE 10 01 14 C8 1C E8 03 00 00 00 00 00 00 70 17 00 00 00 00 23 00 7B B5电脑发送压力包到MCU:
对比官网给出的包结构: 完全正确!转载地址:http://galni.baihongyu.com/