0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MAVLink學(xué)習(xí)之路04_MAVLink移植到STM32具體步驟

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 2020-03-07 16:22 ? 次閱讀

1寫(xiě)在前面

《MAVLink學(xué)習(xí)之路》前面三篇文章,可以說(shuō)是一些基礎(chǔ)知識(shí),也是為本文做的準(zhǔn)備工作(建議初學(xué)者先了解前面三篇文章)。

本文主要內(nèi)容:

MAVLink移植主要步驟

MAVLink移植過(guò)程要點(diǎn)

提示:為方便廣大初學(xué)者朋友盡快掌握MAVLink,我在文末提供MAVLink發(fā)送接收例程(基于STM32硬件、MDK-ARM和EWARM開(kāi)發(fā)環(huán)境)。

為了方便大家平時(shí)公交、地鐵、外出辦事也能用手機(jī)隨時(shí)隨地查看該教程,本文章收錄于【MAVLink學(xué)習(xí)之路】,在微信公眾號(hào)回復(fù)【MAVLink學(xué)習(xí)之路】即可查看。

2

MAVLink移植主要步驟

2.1 移植說(shuō)明

本文主要針對(duì)MAVLink C源代碼移植進(jìn)行講述。其中,MAVLink的C源代碼可以下載網(wǎng)上預(yù)生成的C源代碼庫(kù),也可以通過(guò)生成器工具生成。

A.下載預(yù)生成C代碼庫(kù)

如果是使用標(biāo)準(zhǔn)MAVLink的MSG消息,則可以現(xiàn)在官方指定地址預(yù)先生成的C代碼庫(kù)。預(yù)先生成C代碼庫(kù)總共兩個(gè)版本:

MAVLink V1版:

https://github.com/mavlink/c_library_v1

MAVLink V2版:

https://github.com/mavlink/c_library_v1

(提示:公眾號(hào)不支持外鏈接,請(qǐng)復(fù)制鏈接到瀏覽器打開(kāi))

B.生成器生成C代碼

如果你需要自定義MSG消息,則需要自己通過(guò)工具生成C代碼,具體生成方法請(qǐng)參看文章:《MAVLink學(xué)習(xí)之路03_XML中定義MSG并生成C代碼》

提示:

官方預(yù)生成C代碼庫(kù)就是通過(guò)生成器而生成的,官方提供的生成器工具、預(yù)生成C代碼庫(kù)不定期更新。

也就是說(shuō)可能你不同時(shí)期看到的預(yù)生成庫(kù)不同,不同時(shí)期的生成器及其生成的代碼也有所不同。

如上圖,官方預(yù)生成的C代碼(V1版),與通過(guò)生成器生成的代碼完全一樣。如common.xml通過(guò)生成器生成的C代碼就和上面紫紅色框出來(lái)的代碼一樣。當(dāng)然,生成器版本也是這最新的才對(duì)。

2.2 移植主要步驟

1.下載相關(guān)工具

2.環(huán)境搭建

3.生成C代碼(如果下載官方預(yù)生成代碼,前面兩步可以不用)

4.將C代碼添加到工程

5.配置(如添加MAVLink路徑、修改代碼適配工程)

6.添加MAVLink發(fā)送接收(及應(yīng)用)代碼

步驟1, 2, 3已經(jīng)在前面文章詳細(xì)講述了,本文主要講述步驟4, 5。步驟6下一篇文章詳細(xì)講述。

3

MAVLink移植過(guò)程要點(diǎn)

本節(jié)主要內(nèi)容講述將C代碼添加到工程,然后配置,到編譯沒(méi)有錯(cuò)誤這一過(guò)程中的一些重要知識(shí)點(diǎn)。

3.1 代碼添加到工程

代碼添加到工程其實(shí)很簡(jiǎn)單,將代碼拷貝工程文件下,類似如下圖,添加組,添加源文件。

但是,MAVLink源代碼都是.h頭文件,可以不用像上面那樣添加到工程。當(dāng)然,添加頭文件到工程的好處就是可以快速打開(kāi)頭文件,查找相關(guān)代碼。

說(shuō)這一小節(jié)是想提示大家:MAVLink的C源代碼都是.h頭文件。頭文件只需要添加對(duì)應(yīng)路徑,包含頭文件即可(#include "mavlink.h")。

3.2 配置

1.添加路徑

Keil MDK-ARM和IAR EWARM添加路徑這項(xiàng)內(nèi)容我就不在這里詳細(xì)講述了,不會(huì)的朋友可以參看看我的文章:

Keil MDK-ARM系列教程(一)_新建軟件工程詳細(xì)過(guò)程

IAR EWARM系列教程(一)_新建軟件工程詳細(xì)過(guò)程

3.3 修改代碼

這小節(jié)內(nèi)容可以參看網(wǎng)上一篇博文:

https://www.cnblogs.com/lovechen/p/5809709.html

那篇文章講述的很多,我講一下重點(diǎn):它修改的代碼是針對(duì)老版本主要需要修改兩個(gè)地方。

而且新版本MAVLink生成器已經(jīng)優(yōu)化了一個(gè)項(xiàng),也就是只有一個(gè)地方需要修改:修改mavlink_types.h.

1.針對(duì)Keil MDK-ARM

2.針對(duì)IAR EWARM

替換代碼:#define MAVPACKED( __Declaration__ ) __Declaration__

那篇文章針對(duì)的是老版MAVLink還需要修改一個(gè)const的地方,我這里就不說(shuō)了(新來(lái)的建議用新版的)。

為什么這里要修改呢?

原因在于編譯器的差異導(dǎo)致的。

3.4 補(bǔ)充知識(shí)點(diǎn)

1.#pragma anon_unions

keil中默認(rèn)是不支持匿名結(jié)構(gòu)體的,需要編譯指令#pragma anon_unions指名。

2.MAVPACKED

如果不修改代碼,直接編譯,發(fā)現(xiàn)有許多錯(cuò)誤,原因都來(lái)自MAVPACKED。結(jié)合修改的內(nèi)容,再看下圖,有什么啟發(fā)沒(méi)有。

4

源代碼下載

地址:

https://pan.baidu.com/s/1xraErAnmL-BN9CMwE6aQ-A

密碼:cusq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2258

    文章

    10828

    瀏覽量

    352482
  • C代碼
    +關(guān)注

    關(guān)注

    1

    文章

    89

    瀏覽量

    14237
  • mavlink
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    2578
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    【GD32 MCU 移植教程】10、從STM32F030系列移植GD32E230系列

    GD32E230 對(duì)比 STM32F030 有著很好的兼容性和更高的性價(jià)比,內(nèi)核和外設(shè)都有所增強(qiáng)。本人曾做過(guò)產(chǎn)品的 MCU 替換,將基于 STM32F0xx 1.5.0 固件庫(kù)的應(yīng)用程序移植
    的頭像 發(fā)表于 09-07 10:24 ?257次閱讀
    【GD32 MCU <b class='flag-5'>移植</b>教程】10、從<b class='flag-5'>STM32</b>F030系列<b class='flag-5'>移植</b><b class='flag-5'>到</b>GD32E230系列

    【GD32 MCU 移植教程】9、從 STM32F10x 系列移植 GD32F30x 系列

    對(duì)比、外設(shè)及性能對(duì)比以及從 STM32F10x 移植 GD32F30x 的移植步驟,旨在讓開(kāi)發(fā)者能夠快速?gòu)?/div>
    的頭像 發(fā)表于 09-07 09:57 ?151次閱讀
    【GD32 MCU <b class='flag-5'>移植</b>教程】9、從 <b class='flag-5'>STM32</b>F10x 系列<b class='flag-5'>移植</b><b class='flag-5'>到</b> GD32F30x 系列

    【GD32 MCU 移植教程】8、從 STM32F4xx 系列移植 GD32F4xx 系

    、外設(shè)及性能對(duì)比以及從 STM32F4xx 移植 GD32F4xx 的移植步驟,旨在讓開(kāi)發(fā)者能夠快速?gòu)?b class='flag-5'>
    的頭像 發(fā)表于 09-06 09:40 ?480次閱讀
    【GD32 MCU <b class='flag-5'>移植</b>教程】8、從 <b class='flag-5'>STM32</b>F4xx 系列<b class='flag-5'>移植</b><b class='flag-5'>到</b> GD32F4xx 系

    聚徽-LED 全彩屏的安裝和調(diào)試步驟是什么

    LED 全彩屏的安裝和調(diào)試步驟涉及多個(gè)環(huán)節(jié),以下是根據(jù)搜索結(jié)果整理的具體步驟
    的頭像 發(fā)表于 09-03 09:24 ?155次閱讀

    STM32WB配置SMPS模塊具體步驟是什么?

    想要降低STM32WB的功耗,查找手冊(cè)發(fā)現(xiàn)開(kāi)啟SMPS模塊可以降低功耗。配置SMPS模塊具體步驟是什么有大佬知道嗎?是開(kāi)啟SMPS宏定義,然后寫(xiě)PWR的寄存器就可以了嗎?怎么證明自己的SMPS模塊-配置正確了呢?
    發(fā)表于 03-20 08:18

    STM32F4的裸機(jī)源碼可以移植linux ARM上運(yùn)行嗎? 具體需要怎么實(shí)現(xiàn)呢?

    STM32F4的裸機(jī)源碼可以移植linux ARM開(kāi)發(fā)板上運(yùn)行嗎? 具體需要怎么實(shí)現(xiàn)呢?
    發(fā)表于 03-20 07:00

    MAVLink在應(yīng)用編程中的編程原理和思路

    嵌入式開(kāi)發(fā)過(guò)程中,UART、 CAN、 USB等通信基本離不開(kāi)通信協(xié)議。 下面給大家分享一種通信協(xié)議(MAVLink)在應(yīng)用編程中的編程原理和思路。
    發(fā)表于 03-08 12:45 ?645次閱讀
    <b class='flag-5'>MAVLink</b>在應(yīng)用編程中的編程原理和思路

    移植 SBSFU STM32G070 的過(guò)程

    電子發(fā)燒友網(wǎng)站提供《移植 SBSFU STM32G070 的過(guò)程.pdf》資料免費(fèi)下載
    發(fā)表于 12-18 11:04 ?4次下載
    <b class='flag-5'>移植</b> SBSFU <b class='flag-5'>到</b> <b class='flag-5'>STM32</b>G070 的過(guò)程

    關(guān)于AD5940移植其他單片機(jī)上的問(wèn)題求解

    與NRF52840單片機(jī)是否兼容? 2、AD5940在SPI讀/寫(xiě)之前是否需要一些特殊的配置,具體步驟是什么? 3、官方網(wǎng)站上的代碼是否都是正確的,可以使用的? 4、如果我想把AD5940單獨(dú)移植到我的單片機(jī)上作為它的一部分,具體
    發(fā)表于 12-01 06:05

    土壓力計(jì)安裝說(shuō)明 如何安裝 具體步驟

    土壓力計(jì)安裝說(shuō)明 如何安裝 具體步驟 久巖傳感 智能傳感器采集儀 概述:土壓力儀又稱土壓力盒,同鋼筋計(jì)一樣,亦分為鋼弦式和電阻應(yīng)變式兩種,接收儀分別是頻率儀和電阻應(yīng)變儀,其構(gòu)造和工作原理與鋼筋計(jì)
    的頭像 發(fā)表于 11-22 09:11 ?768次閱讀
    土壓力計(jì)安裝說(shuō)明 如何安裝 <b class='flag-5'>具體步驟</b>

    請(qǐng)問(wèn)AD8651和AD8652具體在性能上有什么區(qū)別,哪款性能更優(yōu)?

    請(qǐng)問(wèn) AD8651和AD8652具體在性能上有什么區(qū)別,哪款性能更優(yōu)
    發(fā)表于 11-22 06:23

    RT-thread源碼移植STM32F10x和STM32F4xx

    RT-thread源碼移植STM32F10x和STM32F4xx: 一、源碼下載 點(diǎn)擊入門->下載 ? 在歷史版本里邊隨便選取一個(gè) ? 會(huì)進(jìn)入百度云盤(pán)的下載地址,里邊有全部版本的源碼
    的頭像 發(fā)表于 11-15 09:38 ?2058次閱讀
    RT-thread源碼<b class='flag-5'>移植</b><b class='flag-5'>到</b><b class='flag-5'>STM32</b>F10x和<b class='flag-5'>STM32</b>F4xx

    RFID工業(yè)識(shí)別系統(tǒng)的設(shè)計(jì)與實(shí)施的具體步驟

    RFID工業(yè)識(shí)別系統(tǒng)的設(shè)計(jì)和應(yīng)用需要結(jié)合企業(yè)的實(shí)際情況來(lái)進(jìn)行調(diào)整,不僅涉及實(shí)施系統(tǒng)的目標(biāo)和規(guī)模,還涉及應(yīng)用場(chǎng)景。下面我們就跟大家一起來(lái)了解一下,工業(yè)識(shí)別系統(tǒng)的設(shè)計(jì)與實(shí)施的具體步驟
    的頭像 發(fā)表于 10-09 10:17 ?504次閱讀

    FreeRTOS移植STM32F103步驟與注意事項(xiàng)

    u3000u3000由于之前聽(tīng)過(guò)太多人抱怨移植FreeRTOSSTM32有各種各樣的問(wèn)題,小燈經(jīng)過(guò)一年多對(duì)FreeRTOS的研究并在公司產(chǎn)品中應(yīng)用, 多少有些心得, 接下來(lái)就由小燈以最新版
    發(fā)表于 09-26 08:03

    STM32F1移植STM32F0的應(yīng)用筆記分享

    需要將應(yīng)用程序移植其它微控制器。另一方面,為了降低成本,用戶可能被迫轉(zhuǎn)換為更小的元件并縮減 PCB 面積。本應(yīng)用筆記旨在幫助您分析從現(xiàn)有的 STM32F1 器件移植
    發(fā)表于 09-22 07:23