MAVLink應用編程主要內容
2.1 發送和接收說明
利用MAVLink通信協議進行編程,主要實現的功能就是:
1.發送端
將需要發送的數據(如:SysState, BatVol),添加MAVLink通信協議,通過硬件(如:UART、CAN)發送出去。
2.接收端
硬件(如:UART、CAN)接收到的數據,通過MAVLink協議解析,得到一幀完整的MAVLink數據包,提取發送端發送的數據(如:SysState, BatVol),將得到的數據應用到我們程序中。
主要流程:數據 -> MAVLink封裝 -> 發送 -> 接收 -> MAVLink解析 ->數據
2.2 發送和接收流程圖
該流程圖是結合我上一篇文章提供的源代碼例程畫出來,包含的只是主要內容,更多細節沒有在流程圖中呈現。
提示:
我提供例程是針對初學者提供比較單一發送和接收例程(MDK-ARM和EWARM包含各自的發送和接收工程)。
而實際項目可能會:
1.發送和接收在一個工程;
2.包含操作系統;
3.發送、接收數據FIFO(隊列)處理;
所以,實際項目,請按需修改我提供的源碼。
3
MAVLink函數接口詳細說明
這一章節講述發送和接收主要用到的函數接口,請參考我提供的源代碼例程理解。
為方便初學者理解,我將其分為發送和接收兩個部分來講述。
3.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)即可。
發送數據的流程:從應用代碼 -> 底層硬件(發送出去)。
如果要深入了解,可以先熟悉軟件流程,再結合源代碼工程,同時參看接口函數具體實現。相信你很快就明白了。
3.2 接收主要函數接口
上面是我提供例程的代碼(方便截圖,去掉了部分),主要講以上4點內容。
1.MAV_USART_GetByte
該函數接口也是硬件底層通信接口,請根據自己情況修改,只需要傳遞數據(流)進來即可。
2.mavlink_parse_char
MAVLink解析是按照一個一個字符進行解析,我們接收到一個字符,就對其進行解析,直到解析完(根據返回標志判斷)一幀數據為止。
3.if(MAVLINK_MSG_ID_SYS_INFO == MAVLinkMsg.msgid)
這里就是對解析好的一包完整消息進行分類判斷吧。其實,我是想說,這個地方還有兩個ID需要進行判斷,SysID系統ID和CompID部件ID。
我提供例程為方便初學者快速理解,未提供SysID和CompID判斷,在后續應用編程中會用到。
接收數據的流程:從應用代碼 -> 底層硬件(發送出去)。
以上就是發送和接收的主要函數接口,如果你只是簡單的進行通信,這幾個接口就夠你使用了。當然,更高級的編程應用還需要你進一步掌握其中的內容。
-
通信協議
+關注
關注
28文章
883瀏覽量
40309 -
CAN
+關注
關注
57文章
2754瀏覽量
463717 -
uart
+關注
關注
22文章
1235瀏覽量
101397 -
mavlink
+關注
關注
0文章
8瀏覽量
2594
發布評論請先 登錄
相關推薦
評論