久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6247|回復: 0
收起左側

MavLink協議-編碼與解碼(STM32源程序)

[復制鏈接]
ID:235201 發表于 2019-9-1 18:49 | 顯示全部樓層 |閱讀模式
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);//(需要自己編寫)}
如果正常的話,就如下圖所示。

心跳包數據.png

        圖中就是心跳包數據,一幀數據有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*/ ;        }}  
如果正常的話,就如下圖所示。

心跳包解析后的數據.png

        圖中就是已經解碼后的心跳包數據。具體的含義可以自行去官網了解,這里就不過多的介紹。

        在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)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日本一二三区电影 | 亚洲精品一区在线观看 | 午夜影视在线观看 | 成人在线不卡 | 国产精品久久久久久 | 欧美在线精品一区 | 国产98色在线 | 日韩 | 亚洲一区二区三区桃乃木香奈 | 中文字幕97 | 午夜视频在线免费观看 | 91成人在线视频 | 国产目拍亚洲精品99久久精品 | 欧美成人高清视频 | 逼逼网 | 综合久久一区 | 国产高清精品在线 | 亚洲精品视频在线 | 中文字幕高清 | 亚洲免费观看 | 伊人久久精品一区二区三区 | 午夜丁香视频在线观看 | 国产一区二区在线免费观看 | 国产日韩欧美精品 | 在线观看中文字幕亚洲 | 区一区二区三在线观看 | a级毛片免费高清视频 | 91在线精品秘密一区二区 | 精品一二区 | av在线电影网站 | 华人黄网站大全 | 欧美激情一区 | 国产一级片一区二区 | 精品久久中文字幕 | 中文字幕人成乱码在线观看 | 国产成人99久久亚洲综合精品 | 精品欧美久久 | 国产精品1区2区 | 成人网在线 | 国产日韩欧美 | 国产精品不卡 | 欧美一区二区三区在线视频 |