stm32開發新方式-PlatformIO 的 IDE

PlatformIO是一款跨平台的物聯網開發的生態環境,VS Code 這款強大的文本編輯器輔以 PlatformIO IDE 插件就可以化身為一款強大的MCU開發環境,支持絕大多數流行的單片機平台,比如今天要討論的 stm32 系列單片機。

測試環境及工具

  1. 本文講解使用的系統平台是 macOS 10.14,其它平台比如 linux、windows 步驟和操作基本類似;
  2. stm32 開發板是以stm32f103c8t6為核心的最小系統板;
  3. stm32 晶元調試器使用的是 stlink v2;

platformio IDE 搭建

  • 下載對應平台的VS Code,這裡下載 mac 版的,下載完成後安裝即可;

  • 打開 vs code ,點擊左側第五個按鈕,顯示插件管理界面,搜索插件 PlatformIO IDE,並安裝此插件;

安裝過程耐心等待,成功後會有提示!

platformio IDE 簡介

重新打開安裝好插件的 VS Code ,會看到左下角多了一個小房子logo樣式的按鈕,點擊這個按鈕就會打開 Platformio 主頁:

可以看到主頁中最頂端包含了一個導航欄,有用的就是前進後退的按鈕和賬戶相關的交互元素,整個主頁其實是Platformio在本地開啟了一個web應用(類似於一個簡單的小網站),包含了Home、Account、Libraries、Boards、Platforms和Devices六個標籤頁,下面分別簡單說明一下。

Home 標籤頁

進入Platformio 的主頁顯示的就是 Home 標籤頁,標籤頁內從上到下可以依次看到以下內容:

  • Show at startup 的複選框,勾上後,每次啟動 vs code 就會啟動這個主頁;
  • Quick Access 下有四個操作按鈕,分別是:
    • New Project:用於新建工程;
    • Import Arduino Project:用於導入電腦中已經存在的 Arduino 工程;
    • Open Project:用於打開已經存在的 Platformio 工程;
    • Project Examples:用於打開本機已經安裝的單片機平台的常式工程;
  • Recent News:顯示最新 Platformio 信息;

Account 標籤頁

這個標籤頁用於管理賬戶信息,首次打開的時候,是用戶登錄頁面,當登錄已有的 Platformio 賬戶後,就會顯示用戶信息和密碼的相關操作,這裡就不細講了!

Libraries 標籤頁

Libraries 標籤頁是管理庫的介面,這裡只簡單說明一下,後面如果有時間就寫一篇文章詳細講解一下庫管理。主要包含四個標籤頁:

  1. Registry 標籤頁

    這個頁面是有一個搜索框,搜索框內沒有內容的時候,會在搜索框下面顯示所有可用的庫,搜索框中輸入關鍵詞就會過濾顯示相關的庫。

    點擊想要安裝的庫,就會進入這個庫的詳細頁面,這個頁面里有安裝按鈕、常式、使用方法等操作介面。
  2. Installed 標籤頁

    這裡主要展示本機已經安裝的第三方庫。

  3. Built-in 標籤頁

    這裡顯示已安裝平台內置的庫。
  4. Updates 標籤頁

    展示需要更新的庫。

Boards 標籤頁

這個標籤頁用來展示 Platformio 支持的開發板列表,最上方的搜索框內可以輸入關鍵詞過濾顯示相關的開發板,比如輸入 Arduino 就會顯示Arduino的開發板。

列表中每個條目顯示一個開發板,包含信息:

Platforms 標籤頁

這個標籤頁用來管理平台支持,比如我的這裡安裝了兩個單片機平台的支持:

  • Atmel AVR
  • ST STM32

這兩個條目可以點進去查看平台詳細信息和對平台進行一定操作。標籤頁內還包含所有的嵌入式、桌面平台的相關管理項,同時也有框架展示的標籤頁,可以通過這裡的每個條目了解對應框架的信息和使用方法。

Devices 標籤頁

這裡顯示連接電腦的硬體設備,比如串口、數字邏輯設備和網路設備。

使用 Platformio IDE

這裡以創建 ST STM32 平台的 stm32f103c8t6 晶元工程為例,講解一下工程的基本使用方法。

新建工程

  1. 打開 Platformio 的主頁,點擊 New Projects
  2. 在工程新建窗口中,配置如下創建名為 blink 的工程:

最後點擊 Finish ,等待片刻工程就會創建完成。

這裡暫時選擇使用框架為 Arduino,stm32還可以選擇其它框架,這裡先挖個坑,等有時間專門寫一下針對stm32其它框架的使用。

工程界面介紹

新建工程後,就會打開相應的工程,如下圖所示:

文件結構

窗口左側默認顯示的是資源管理器,這裡可以看到文件結構。

  1. .pioenvs 文件夾:存放編譯產生的中間文件和最後生成的執行文件;
  2. lib 文件夾:存放庫文件;
  3. src 文件夾:存放源文件,其內部默認生成名為 main.cpp 的源文件;
  4. platformio.ini:工程的配置文件

工具欄

在工程窗口的左下方會看到多出來的一些按鈕,這就是工程的工具欄:

依次說明這幾個快捷按鈕的作用:

  1. 主頁按鈕:前面已經提到過是打開 Platformio 主頁的按鈕
  2. 編譯按鈕:小對號,點擊後會編譯當前激活的工程
  3. 燒寫按鈕:向右的小箭頭,觸發程序燒寫的過程
  4. 遠程燒寫按鈕:小雲朵,觸發遠程燒寫程序的過程
  5. 清理按鈕:小垃圾桶,用於清理編譯過程生成的文件
  6. 測試按鈕:小燒瓶,測試工程,免費版的Platformio受限不能用;
  7. 運行任務按鈕:小本子,會跳出操作菜單,包含編譯、燒寫、調試等操作;
  8. 串口監視器按鈕:小插頭,點擊後會啟動命令行的串口監視助手;
  9. 終端按鈕:小命令行,點擊後新建一個終端窗口;

快捷操作欄

點擊窗口左側的做後一個logo也就是小螞蟻頭,就會出現針對工程的快捷操作:

根據字面意思就知道相應快捷操作是什麼用途了,這裡就不做介紹了。

編寫代碼

src文件夾下為源文件,更改源文件 main.cpp 的內容如下:

#include <Arduino.h>

#define LED_PIN PB0 // 十里使用的最小系統板板上LED連接的是PB0

void setup() {
pinMode(LED_PIN, OUTPUT);
}

void loop() {
digitalWrite(LED_PIN, HIGH);
delay(1000);
digitalWrite(LED_PIN, LOW);
delay(1000);
}

編寫代碼過程中就會感受到強大的代碼提示功能,寫代碼從此一馬平川,各種666!同時也支持代碼跳轉,比如跳轉到函數定義,可以按住 command 鍵(linux和window下是 ctrl 鍵)然後滑鼠左鍵單擊就可以跳轉,感受空間穿梭的快感!

編譯程序

這個操作很簡單,點擊工具欄中的編譯按鈕即可觸發編譯,編譯信息會在新的終端窗口中顯示,初次編譯的時候,會很慢,那是因為 Platformio 根據工程配置下載對應的平台支持文件,包含了配置的框架、編譯工具、調試工具等等,因為這是國外的服務,所以可能會很慢,耐心等待即可,編譯完成後,會出現如下類似信息:

> Executing task: platformio run <

Processing genericSTM32F103C8 (platform: ststm32; board: genericSTM32F103C8; framework: arduino)
...
Compiling .pioenvs/genericSTM32F103C8/src/main.cpp.o
...
Compiling .pioenvs/genericSTM32F103C8/FrameworkArduino/wirish_time.cpp.o
Archiving .pioenvs/genericSTM32F103C8/libFrameworkArduino.a
Indexing .pioenvs/genericSTM32F103C8/libFrameworkArduino.a
Linking .pioenvs/genericSTM32F103C8/firmware.elf
Checking size .pioenvs/genericSTM32F103C8/firmware.elf
Building .pioenvs/genericSTM32F103C8/firmware.bin
Memory Usage -> http://bit.ly/pio-memory-usage
DATA: [== ] 15.3% (used 3136 bytes from 20480 bytes)
PROGRAM: [== ] 21.6% (used 14188 bytes from 65536 bytes)
============================ [SUCCESS] Took 3.33 seconds ============================

終端將被任務重用,按任意鍵關閉。

觸發編譯還可以使用快捷操作欄中的 build操作。

上傳程序

十里使用的是 stm32f103c8t6 的最小系統板,經調試器 stlink v2 連接電腦,點擊工具欄的燒寫按鈕(或者快捷操作欄的 Upload 操作),即可看到跳出的終端中顯示上傳過程中列印的信息,這裡就不列出來了。

燒寫過程中,stlink v2 調試器的指示燈會有所反應,完成後,最小系統板的程序就會運行,就會看到板上的LED閃動了起來,說明燒寫成功!

調試程序

很可惜!免費版(社區版)PlatformIO 的調試功能受限,所以不能正常進行程序調試,若想正常使用,需要訂閱Plus版。作為一個勤儉節約的人怎麼可能要花這份錢呢!那怎麼辦呢!不要緊,VS code中有款插件叫做 Cortex Debug,稍作配置就能進行正常的工程調試啦!

openocd 添加至系統環境變數

在這裡我們使用openocd開啟調試服務,若要使用此方式進行調試, Cortex Debug 能自動調用環境變數中能找到的openocd,為了使用方便,需要將openocd添加至系統的環境變數,上面我們知道,Platformio 已經自動安裝了編譯調試工具。

在用戶目錄下應該會找到文件夾 .platformio ,會從下面的文件夾中找到 openocd 運行文件(windows下是openocd.exe,目錄可能有所不同):

/Users/5km/.platformio/packages/tool-openocd/bin

  • 對於linux或者macOS使用者
    • 若使用的命令行shell是zsh,可以使用以下命令添加環境變數:

echo export PATH="/Users/5km/.platformio/packages/tool-openocd/bin:$PATH" > ~/.zshrc

    • 若使用的命令行shell是bash,可以使用以下命令添加環境變數:

echo export PATH="/Users/5km/.platformio/packages/tool-openocd/bin:$PATH" > ~/.bashrc

  • windows用戶,找到相應目錄以後,按照網上的方法,將目錄添加到環境變數中就可以了

添加完成後,啟動一個命令行,執行以下命令,如果列印了版本信息說明添加成功:

$ openocd -v
GNU MCU Eclipse 64-bits Open On-Chip Debugger 0.10.0+dev-00392-gbe9ef0b0 (2018-01-12-16:51)
Licensed under GNU GPL v2
For bug reports, read
http://openocd.org/doc/doxygen/bugs.html

安裝 Cortex Debug 插件

VS code 插件管理器中搜索 Cortex Debug ,安裝即可。

優化編譯選項

程序調試,需要編譯的時候生成符號庫,所以需要為工程配置中添加生成符號庫的支持,工程配置 platformio.ini 中添加以下內容即可:

build_flags =
-g

最終配置內容:

[env:genericSTM32F103C8]
platform = ststm32
board = genericSTM32F103C8
framework = arduino
build_flags =
-g

重新編譯一遍!

添加調試配置

  • VS Code 菜單欄——調試——添加配置;
  • 選擇 {} Cortex Debug: OpenOCD 即可添加配置;

  • 更改配置,參考 Cortex-Debug Launch Configurations 添加和調整 .vscode/launch.json 文件的部分配置如下:

{
"version": "0.2.0",
"configurations": [
{
"type": "cortex-debug",
"request": "launch",
"servertype": "openocd",
"cwd": "${workspaceRoot}",
"executable": "${workspaceRoot}/.pioenvs/genericSTM32F103C8/firmware.elf",
"name": "Debug (OpenOCD)",
"device": "STM32F103C8",
"configFiles": [
"interface/stlink.cfg",
"target/stm32f1x.cfg"
],
"runToMain": true
},
]
}

其中,

  • - executeable 配置為工程中生成的 elf 文件的路徑,這個需要自行更改為自己工程的
  • - device 指定晶元型號,調試器會自行選擇 svd 文件,以便正確顯示外設寄存器的正確信息
  • - configFiles 配置兩個文件,一個是介面配置,一個是調試目標(晶元)的配置文件
  • - runToMain 設置為true,啟動調試後會運行到 main 入口停止

進行調試

點擊 VS Code 窗口左側的調試按鈕,切換至調試界面:

橙色圈內的下拉菜單可以選擇調試配置,根據名稱(對應上面配置信息中的 name )選擇剛剛添加的配置,單擊其左邊的綠色三角按鈕(保證電腦經stlink連接到了最小系統板上),即可啟動調試過程:

啟動調試後默認停在程序最開始的地方,能夠看到窗口最上方出現了一個調試工具欄, 包含了基本的執行操作:

依次是繼續執行、單步、單步進入、單步跳出、重新運行和停止操作按鈕。

可以打開 main.cpp 文件,在代碼行號左側點擊可以添加或刪除斷點。在 pinMode(LED_PIN, OUTPUT); 添加斷點,點擊繼續執行按鈕,運行至斷點處,然後點擊單步進入按鈕,此時可以看到窗口:

可以看到窗口左側部分能夠查看變數,包含局部、全局變數;還可以添加變數監視;再下面就是調用堆棧,這裡可以看到函數的調用層次。

還可以看到一個 CORTEX PERIPHERALS 的標籤,點開後會看到如下圖橙色框內的外設寄存器的信息,方便調試程序!

以上看來滿足了基本的調試功能了,大功告成!

one more thing

其實調試這塊兒有一個問題,Platformio比較霸道,當你關閉工程重新打開後,它會自動把 launch.json 中的配置更改為 Platformio 的調試配置,所以每次打開工程後需要自行添加 Cortex Debug 的配置,目前還沒想到很好的解決方法,想到後會更新在此。

總結

本文講了 PlatformIO IDE 的安裝以及基本的使用,滿足了stm32系列單片機的基本開發需求。


博客原文:

stm32開發新方式-platformio的IDE?

www.smslit.top圖標
推薦閱讀:

TAG:STM32 | 嵌入式開發 | MCU程序設計 |