MAVLink應(yīng)用編程主要內(nèi)容
2.1 發(fā)送和接收說(shuō)明
利用MAVLink通信協(xié)議進(jìn)行編程,主要實(shí)現(xiàn)的功能就是:
1.發(fā)送端
將需要發(fā)送的數(shù)據(jù)(如:SysState, BatVol),添加MAVLink通信協(xié)議,通過(guò)硬件(如:UART、CAN)發(fā)送出去。
2.接收端
硬件(如:UART、CAN)接收到的數(shù)據(jù),通過(guò)MAVLink協(xié)議解析,得到一幀完整的MAVLink數(shù)據(jù)包,提取發(fā)送端發(fā)送的數(shù)據(jù)(如:SysState, BatVol),將得到的數(shù)據(jù)應(yīng)用到我們程序中。
主要流程:數(shù)據(jù) -> MAVLink封裝 -> 發(fā)送 -> 接收 -> MAVLink解析 ->數(shù)據(jù)
2.2 發(fā)送和接收流程圖
該流程圖是結(jié)合我上一篇文章提供的源代碼例程畫出來(lái),包含的只是主要內(nèi)容,更多細(xì)節(jié)沒(méi)有在流程圖中呈現(xiàn)。
提示:
我提供例程是針對(duì)初學(xué)者提供比較單一發(fā)送和接收例程(MDK-ARM和EWARM包含各自的發(fā)送和接收工程)。
而實(shí)際項(xiàng)目可能會(huì):
1.發(fā)送和接收在一個(gè)工程;
2.包含操作系統(tǒng);
3.發(fā)送、接收數(shù)據(jù)FIFO(隊(duì)列)處理;
所以,實(shí)際項(xiàng)目,請(qǐng)按需修改我提供的源碼。
3
MAVLink函數(shù)接口詳細(xì)說(shuō)明
這一章節(jié)講述發(fā)送和接收主要用到的函數(shù)接口,請(qǐng)參考我提供的源代碼例程理解。
為方便初學(xué)者理解,我將其分為發(fā)送和接收兩個(gè)部分來(lái)講述。
3.1 發(fā)送主要函數(shù)接口
上面是我提供例程的代碼,主要講4個(gè)接口。
1.MAVLink_SendTest
這個(gè)接口是根據(jù)自己情況進(jìn)行封裝函數(shù),用于應(yīng)用程序調(diào)用,這里不多說(shuō)。
2.mavlink_msg_sys_info_pack
這個(gè)函數(shù)接口主要目的:將變量信息(SysID、CompID、SysState、BatVol)打包,最終得到MAVLink_Msg這個(gè)消息包。
3.mavlink_msg_to_send_buffer
將上一步得到的MAVLink_Msg轉(zhuǎn)換成我們要發(fā)送的數(shù)據(jù)BUF緩存。
4.MAV_USART_SendNByte
這個(gè)函數(shù)接口也是我自己根據(jù)硬件(UART)封裝的,如果你是其它硬件通信,只需要封裝一個(gè)類似的接口(參數(shù)具有BUF,LEN)即可。
發(fā)送數(shù)據(jù)的流程:從應(yīng)用代碼 -> 底層硬件(發(fā)送出去)。
如果要深入了解,可以先熟悉軟件流程,再結(jié)合源代碼工程,同時(shí)參看接口函數(shù)具體實(shí)現(xiàn)。相信你很快就明白了。
3.2 接收主要函數(shù)接口
上面是我提供例程的代碼(方便截圖,去掉了部分),主要講以上4點(diǎn)內(nèi)容。
1.MAV_USART_GetByte
該函數(shù)接口也是硬件底層通信接口,請(qǐng)根據(jù)自己情況修改,只需要傳遞數(shù)據(jù)(流)進(jìn)來(lái)即可。
2.mavlink_parse_char
MAVLink解析是按照一個(gè)一個(gè)字符進(jìn)行解析,我們接收到一個(gè)字符,就對(duì)其進(jìn)行解析,直到解析完(根據(jù)返回標(biāo)志判斷)一幀數(shù)據(jù)為止。
3.if(MAVLINK_MSG_ID_SYS_INFO == MAVLinkMsg.msgid)
這里就是對(duì)解析好的一包完整消息進(jìn)行分類判斷吧。其實(shí),我是想說(shuō),這個(gè)地方還有兩個(gè)ID需要進(jìn)行判斷,SysID系統(tǒng)ID和CompID部件ID。
我提供例程為方便初學(xué)者快速理解,未提供SysID和CompID判斷,在后續(xù)應(yīng)用編程中會(huì)用到。
接收數(shù)據(jù)的流程:從應(yīng)用代碼 -> 底層硬件(發(fā)送出去)。
以上就是發(fā)送和接收的主要函數(shù)接口,如果你只是簡(jiǎn)單的進(jìn)行通信,這幾個(gè)接口就夠你使用了。當(dāng)然,更高級(jí)的編程應(yīng)用還需要你進(jìn)一步掌握其中的內(nèi)容。
-
通信協(xié)議
+關(guān)注
關(guān)注
28文章
887瀏覽量
40318 -
CAN
+關(guān)注
關(guān)注
57文章
2756瀏覽量
463841 -
uart
+關(guān)注
關(guān)注
22文章
1237瀏覽量
101447 -
mavlink
+關(guān)注
關(guān)注
0文章
8瀏覽量
2595
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論