MavLink协议(开发笔记)
本例程在探索者串口实验基础上面修改。如果您的硬件平台是探索者,可以直接下载使用。 一.MavLink编码(数据封包) 数据封包:将所需要发送的数据包装成MavLink协议字节流,通过串口发送出去。 下面是发送心跳包的Demo void Mavlink_TX_Heartbeat(void){ //消息包结构
mavlink_message_t MSG; //调用mavlink_msg_heartbeat_pack函数将数据封包,传入到消息结构中。
uint16_t len = mavlink_msg_heartbeat_pack(
0x01, //system_id 0x01, //component_id &MSG, //msg 0x02, //type 0x03, //autopilot 0x51, //base_mode 0x00, //custom_mode 0x03);//system_status //临时缓存区
uint8_t MAVLink_Buf[6+9+2]; //调用mavlink_msg_to_send_buffer函数将消息结构里面的数据以字节流的方式保存到缓存区
len = mavlink_msg_to_send_buffer(MAVLink_Buf, &MSG); //调用MAV_USART_SendNByte函数发送缓存区里面的数据 MAV_USART_SendNByte(MAVLink_Buf, len);//(需要自己编写)}
如果正常的话,就如下图所示。
图中就是心跳包数据,一帧数据有17位。
在ardupilotmega文件里面还有大量的数据封包函数, 比如: mavlink_msg_sys_status_pack 系统状态 mavlink_msg_battery_status_pack 电池状态 mavlink_msg_highres_imu_pack IMU mavlink_msg_global_position_int_pack 定位 等等。
二.MavLink解码(数据解析) 数据解码:将接收到的数据转换成字符的形式显示出来。
下面是解码心跳包的Demo //状态uint8_t ret = 0;//消息结构mavlink_message_t msg;void USART1_IRQHandler(void) //串口1中断服务程序{ if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
{ uint8_t data = USART_ReceiveData(USART1);//(USART1->DR); //读取接收到的数据 //调用mavlink_parse_char函数来判断数据,数据接收完成,返回MAVLINK_FRAMING_OK ret = mavlink_parse_char(MAVLINK_COMM_3, data, &msg, &status); }}
void MAVLinkRcv_Handler(mavlink_message_t MAVLinkMsg){ //心跳包结构 mavlink_heartbeat_t current_messages; if(MAVLinkMsg.msgid==MAVLINK_MSG_ID_HEARTBEAT)//消息ID为心跳包
{ //调用mavlink_msg_heartbeat_decode函数解码心跳包 mavlink_msg_heartbeat_decode(&MAVLinkMsg, ¤t_messages); //显示心跳包数据(需要自己编写) SHOW_HEARTBEAT(MAVLinkMsg, current_messages); }}
int main(void){
init();
while(1) { if( MAVLINK_FRAMING_OK == ret )
{ //接收成功 //解码
MAVLinkRcv_Handler(msg);
ret = 0; }
else /*TODO*/ ; }}
如果正常的话,就如下图所示。
图中就是已经解码后的心跳包数据。具体的含义可以自行去官网了解,这里就不过多的介绍。
在ardupilotmega文件里面还有大量的数据解码函数, 比如: mavlink_msg_battery_status_decode 系统状态 mavlink_msg_battery_status_decode 电池状态 mavlink_msg_highres_imu_decode IMU mavlink_msg_global_position_int_decode 定位 等等。
以上就是MavLink协议的心跳包编码与解码实现
全部程序51hei下载地址:
MacLink协议.7z
(678.23 KB, 下载次数: 102)
|