PlatformIO是一款跨平台的物聯網開發的生態環境,VS Code 這款強大的文本編輯器輔以 PlatformIO IDE 插件就可以化身為一款強大的MCU開發環境,支持絕大多數流行的單片機平台,比如今天要討論的 stm32 系列單片機。
安裝過程耐心等待,成功後會有提示!
重新打開安裝好插件的 VS Code ,會看到左下角多了一個小房子logo樣式的按鈕,點擊這個按鈕就會打開 Platformio 主頁:
可以看到主頁中最頂端包含了一個導航欄,有用的就是前進後退的按鈕和賬戶相關的交互元素,整個主頁其實是Platformio在本地開啟了一個web應用(類似於一個簡單的小網站),包含了Home、Account、Libraries、Boards、Platforms和Devices六個標籤頁,下面分別簡單說明一下。
進入Platformio 的主頁顯示的就是 Home 標籤頁,標籤頁內從上到下可以依次看到以下內容:
Show at startup
Quick Access
Recent News
這個標籤頁用於管理賬戶信息,首次打開的時候,是用戶登錄頁面,當登錄已有的 Platformio 賬戶後,就會顯示用戶信息和密碼的相關操作,這裡就不細講了!
Libraries 標籤頁是管理庫的介面,這裡只簡單說明一下,後面如果有時間就寫一篇文章詳細講解一下庫管理。主要包含四個標籤頁:
這裡主要展示本機已經安裝的第三方庫。
這個標籤頁用來展示 Platformio 支持的開發板列表,最上方的搜索框內可以輸入關鍵詞過濾顯示相關的開發板,比如輸入 Arduino 就會顯示Arduino的開發板。
列表中每個條目顯示一個開發板,包含信息:
這個標籤頁用來管理平台支持,比如我的這裡安裝了兩個單片機平台的支持:
這兩個條目可以點進去查看平台詳細信息和對平台進行一定操作。標籤頁內還包含所有的嵌入式、桌面平台的相關管理項,同時也有框架展示的標籤頁,可以通過這裡的每個條目了解對應框架的信息和使用方法。
這裡顯示連接電腦的硬體設備,比如串口、數字邏輯設備和網路設備。
這裡以創建 ST STM32 平台的 stm32f103c8t6 晶元工程為例,講解一下工程的基本使用方法。
New Projects
最後點擊 Finish ,等待片刻工程就會創建完成。
Arduino
新建工程後,就會打開相應的工程,如下圖所示:
窗口左側默認顯示的是資源管理器,這裡可以看到文件結構。
.pioenvs
lib
src
main.cpp
platformio.ini
在工程窗口的左下方會看到多出來的一些按鈕,這就是工程的工具欄:
依次說明這幾個快捷按鈕的作用:
點擊窗口左側的做後一個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 鍵)然後滑鼠左鍵單擊就可以跳轉,感受空間穿梭的快感!
command
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操作。
build
十里使用的是 stm32f103c8t6 的最小系統板,經調試器 stlink v2 連接電腦,點擊工具欄的燒寫按鈕(或者快捷操作欄的 Upload 操作),即可看到跳出的終端中顯示上傳過程中列印的信息,這裡就不列出來了。
Upload
燒寫過程中,stlink v2 調試器的指示燈會有所反應,完成後,最小系統板的程序就會運行,就會看到板上的LED閃動了起來,說明燒寫成功!
很可惜!免費版(社區版)PlatformIO 的調試功能受限,所以不能正常進行程序調試,若想正常使用,需要訂閱Plus版。作為一個勤儉節約的人怎麼可能要花這份錢呢!那怎麼辦呢!不要緊,VS code中有款插件叫做 Cortex Debug,稍作配置就能進行正常的工程調試啦!
在這裡我們使用openocd開啟調試服務,若要使用此方式進行調試, Cortex Debug 能自動調用環境變數中能找到的openocd,為了使用方便,需要將openocd添加至系統的環境變數,上面我們知道,Platformio 已經自動安裝了編譯調試工具。
在用戶目錄下應該會找到文件夾 .platformio ,會從下面的文件夾中找到 openocd 運行文件(windows下是openocd.exe,目錄可能有所不同):
.platformio
/Users/5km/.platformio/packages/tool-openocd/bin
echo export PATH="/Users/5km/.platformio/packages/tool-openocd/bin:$PATH" > ~/.zshrc
echo export PATH="/Users/5km/.platformio/packages/tool-openocd/bin:$PATH" > ~/.bashrc
添加完成後,啟動一個命令行,執行以下命令,如果列印了版本信息說明添加成功:
$ 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
VS code 插件管理器中搜索 Cortex Debug ,安裝即可。
程序調試,需要編譯的時候生成符號庫,所以需要為工程配置中添加生成符號庫的支持,工程配置 platformio.ini 中添加以下內容即可:
build_flags = -g
最終配置內容:
[env:genericSTM32F103C8] platform = ststm32 board = genericSTM32F103C8 framework = arduino build_flags = -g
重新編譯一遍!
{} Cortex Debug: OpenOCD
.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
device
configFiles
runToMain
點擊 VS Code 窗口左側的調試按鈕,切換至調試界面:
橙色圈內的下拉菜單可以選擇調試配置,根據名稱(對應上面配置信息中的 name )選擇剛剛添加的配置,單擊其左邊的綠色三角按鈕(保證電腦經stlink連接到了最小系統板上),即可啟動調試過程:
name
啟動調試後默認停在程序最開始的地方,能夠看到窗口最上方出現了一個調試工具欄, 包含了基本的執行操作:
依次是繼續執行、單步、單步進入、單步跳出、重新運行和停止操作按鈕。
可以打開 main.cpp 文件,在代碼行號左側點擊可以添加或刪除斷點。在 pinMode(LED_PIN, OUTPUT); 添加斷點,點擊繼續執行按鈕,運行至斷點處,然後點擊單步進入按鈕,此時可以看到窗口:
pinMode(LED_PIN, OUTPUT);
可以看到窗口左側部分能夠查看變數,包含局部、全局變數;還可以添加變數監視;再下面就是調用堆棧,這裡可以看到函數的調用層次。
還可以看到一個 CORTEX PERIPHERALS 的標籤,點開後會看到如下圖橙色框內的外設寄存器的信息,方便調試程序!
以上看來滿足了基本的調試功能了,大功告成!
其實調試這塊兒有一個問題,Platformio比較霸道,當你關閉工程重新打開後,它會自動把 launch.json 中的配置更改為 Platformio 的調試配置,所以每次打開工程後需要自行添加 Cortex Debug 的配置,目前還沒想到很好的解決方法,想到後會更新在此。
launch.json
本文講了 PlatformIO IDE 的安裝以及基本的使用,滿足了stm32系列單片機的基本開發需求。
博客原文:
stm32開發新方式-platformio的IDE?www.smslit.top 推薦閱讀:
TAG:STM32 | 嵌入式開發 | MCU程序設計 |