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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5761|回復: 0
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
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)

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美美女被c | 国产高清精品一区二区三区 | 91在线电影 | 女人毛片a毛片久久人人 | 欧美精品一区二区在线观看 | 在线观看国产精品一区二区 | 久久国产精品视频免费看 | av电影手机在线看 | 日韩视频国产 | 欧美日韩精品一区 | 日韩久久久久久 | 国产在线一区二区三区 | 精品中文视频 | 欧美国产91 | 欧美日韩国产三级 | 天天躁天天操 | 午夜一级黄色片 | 国产视频中文字幕 | 国产精品久久久久久久 | 久久久91精品国产一区二区三区 | 在线观看h视频 | 中文字幕第一页在线 | 亚洲一区中文字幕 | 欧美又大粗又爽又黄大片视频 | 亚州中文字幕 | 欧美亚洲激情 | 午夜免费观看网站 | 一区二区三区欧美在线 | 国产精品毛片一区二区在线看 | 久久久无码精品亚洲日韩按摩 | jav成人av免费播放 | h视频免费看 | 国产精品久久久久久久久久久久冷 | 一级做a爰片性色毛片 | 在线观看国产视频 | 黄视频免费在线 | 欧美福利网站 | 免费一级毛片 | www操操| 黄网免费看 | 国产精品国产三级国产aⅴ中文 |