VSCode下STM32開發環境搭建
本STM32教程使用vscode的EIDE插件的開發環境,完全免費,有管理代碼文件的界面,不需要其它IDE。
視頻教程見本人的
VSCode+EIDE開發STM32
安裝EIDE插件
Embedded IDE 嵌入式IDE
這個插件可以幫我們管理代碼文件,配置工具鏈(什么是工具鏈見下文)等。
這里先安裝此插件,此插件使用,工具鏈安裝等,后面配合示例工程講解。
EIDE網站,可以查看此插件的更新日志。
這是什么? | Embedded IDE For VSCode
什么是工具鏈
簡單的說就是把源文件(也就是xx.c xxx.cpp等)變成可執行文件的東西。
開發不同的東西需要不同的工具鏈,
比如在windows上,源文件最后會變成.exe
用Visual Studio寫.cpp用的就是MSVC 編譯器工具集(也稱為工具鏈或“生成工具”)
用VSCode寫.cpp,教程都會讓你下載mingw
而開發單片機,也需要對應其內核的工具鏈。
stm32是arm的內核,所以需要arm相關的工具鏈。
keil就是armcc v5 v6的工具鏈(收費)。
本教程使用的是免費的gnu arm embedded toolchain即GNU Arm 嵌入式工具鏈。
這是它的網址Arm GNU Toolchain Downloads – Arm Developer,如果你想可以去下載最新版,我這里用EIDE安裝。
使用EIDE安裝gcc工具鏈
點擊安裝實用工具,安裝gcc_arm工具鏈
它會開始下載安裝工具鏈
如果使用EIDE安裝工具鏈,它的安裝路徑如下
C:\Users\用戶名.eide\tools
假如你本來就有,可以直接設置安裝位置。
比如你自己下載了工具鏈,或者安裝了stm32的工具包(STM32 VS Code Extension 插件讓你安裝的那個),或者安裝了STM32CubeIDE,就直接找到gcc_arm工具鏈填入其路徑就行。
點擊設置工具鏈,設置 GNU Arm Embedded Toolchain
示例工程
創建一個示例工程,進一步說明。
示例工程實現LED閃爍。
用CubeMX生成工程代碼
打開stm32cubeMX,打開選擇器,選擇你開發板對應的芯片型號。
進入配置界面,設置LED對應引腳為輸出模式,通常是PC13因為這個引腳沒有太多其它功能。
順便設置個標簽,LED0,便于后面寫代碼。
工程名稱就叫demo1吧。
只復制必要的庫文件,為每個外設生成一對‘.c/.h’文件初始化外設等不再贅述。
工具鏈/IDE選擇
這里的STM32CubeIDE CMake Makefile 使用的都是arm-gcc的工具鏈!
不過CMake Makefile產生的工程需要自己配置項目資源,CubeIDE產生的工程導入即可。
這里先選擇CMake或者Makefile自己配置一下項目,STM32CubeIDE導入的教程見下文。
生成的工程文件夾
EIDE插件的使用
新建空項目
STM32選擇Cortex-M項目,項目名稱建議和之前的工程名稱保持一致。
項目保存位置為工程文件夾的位置(而不是工程文件夾內)
項目文件夾已經存在的警告選是
切換至工作區
VSCode切換到了工作區
編譯工程
添加項目資源
添加.c文件
添加普通文件夾,它具有遞歸查找能力,能往下查找到你的代碼文件。
添加包含.c代碼的文件夾。
.c文件添加完畢
添加啟動文件startup.s
項目資源添加一個虛擬文件夾
添加啟動文件startup.s,選擇文件的時候選擇any就可以看到所有文件。
啟動文件.s添加完畢
順便說一下
普通文件夾要在工程文件夾下面添加。
當然如果你愿意,可以全部使用虛擬文件夾去添加所有源文件。
只要將工程涉及到源文件全部添加了就可以。
構建配置
選擇CPU類型
選擇CPU類型,根據你的單片機選擇,STM32F4選M4,F1選M3
設置鏈接腳本路徑
設置鏈接腳本路徑,就是CubeMX生成的flash.ld文件。
它就在工程文件夾那層里,把它文件名填上去就行
項目屬性
就是,頭文件路徑、庫文件路徑、要預處理的宏定義這些。
如果搞不清楚CubeMX生成的代碼的相關配置,可以查看CubeMX生成的CMake或makefile。
這里說一下,并沒有使用CMake,打開它只是為了確認要填入的信息。
添加頭文件目錄
就是所有.h所在的目錄。
包含目錄添加完畢
添加預處理宏定義
代碼文件里有類似這樣的代碼,這些編譯預處理命令需要添加預處理宏定義配合編譯。
#if defined (USE_HAL_DRIVER)//如果定義了它
//...
//做什么什么
//...
#endif /* USE_HAL_DRIVER */
預處理宏定義添加完畢
當然,如果你自己建立了代碼文件夾也需要添加相關的配置。
編譯
都配置好了,然后就能編譯了
隨便打開一個代碼文件,右上角既可以找到編譯。
編譯完畢,沒有錯誤沒有警告。
生成的可執行文件(待下載到單片機上)
如何燒錄(下載)
安裝下載器對應的工具。
一般大家搞stm32都是用stlink因為便宜,如果是jlink就下載jlink的。
安裝后它也會安裝STLINk的驅動等。
燒錄配置,選擇燒錄工具
添加工程代碼
添加讓LED0閃爍的代碼,并重新編譯。
HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET);HAL_Delay(500);HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);HAL_Delay(500);
燒錄
點擊右上角的下載按鈕即可下載。
提示:請正確連接你的下載器和開發板。
燒錄完畢
LED0已經開始閃爍。
調試
相關解釋請參考
cortex-debug 用法 - 博客 - Embedded IDE Forum
安裝調試用的插件和工具
安裝Cortex Debug
安裝VSCode插件 Cortex Debug,調試需要。
安裝OpenOCD
OpenOCD是一個免費的開源軟件,用于調試和編程嵌入式設備。
可以直接在EIDE這里下載。
假如你有OpenOCD就不用重新下載了,之后寫路徑的時候改一下就行。
比如你自己下載了OpenOCD,或者安裝了stm32的工具包(STM32 VS Code Extension 插件讓你安裝的那個),就直接找到填入其路徑就行。
如果使用EIED安裝OpenOCD,它的安裝位置如下,安裝位置之后要用。
C:\Users\用戶名.eide\tools
創建launch.json文件
launch.json 是 Visual Studio Code 中用于配置調試器的文件。
launch.json的創建
切換到代碼文件,點運行和調試。創建launch.json文件,在工程中。
調試器選擇Cortex Debug
自動生成代碼的時候選擇OpenOCD
這是自動生成的launch.json還需要修改
填寫可執行文件路徑
調試要用到可執行文件.elf,它在build/Debug下。
executable 這里填入
//elf文件看當前工程名稱或是看build文件夾下的elf文件名稱"executable": "build/Debug/demo1.elf",
填寫配置文件路徑
找到你OpenOCD的安裝位置
configFiles這里如下填寫
"configFiles": [//使用ST-LINK,路徑根據你的openOCD的安裝位置修改,stlink版本根據你的下載器修改"C:/Users/CaiYunWei/.eide/tools/openocd_7a1adfbec_mingw32/share/openocd/scripts/interface/stlink-v2-1.cfg",//使用stm32f?,路徑根據你的openOCD的安裝位置修改,stm32f?根據你的芯片修改"C:/Users/CaiYunWei/.eide/tools/openocd_7a1adfbec_mingw32/share/openocd/scripts/target/stm32f4x.cfg"],
stlink .cfg文件路徑如下,使用哪個根據你的下載器修改。
C:\Users\你的用戶名.eide\tools\openocd_7a1adfbec_mingw32\share\openocd\scripts\interface
stm32 .cfg文件路徑如下,使用哪個根據你的芯片修改。
C:\Users\你的用戶名.eide\tools\openocd_7a1adfbec_mingw32\share\openocd\scripts\interface\target
參考的launch.json文件
{// 使用 IntelliSense 了解相關屬性。 // 懸停以查看現有屬性的描述。// 欲了解更多信息,請訪問: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"cwd": "${workspaceRoot}",//.elf可執行文件路徑"executable": "build/Debug/demo1.elf","name": "Debug with OpenOCD","request": "launch","type": "cortex-debug","servertype": "openocd","configFiles": [//使用ST-LINK,路徑根據你的openOCD的安裝位置修改,stlink版本根據你的下載器修改"C:/Users/CaiYunWei/.eide/tools/openocd_7a1adfbec_mingw32/share/openocd/scripts/interface/stlink-v2-1.cfg",//使用stm32f?,路徑根據你的openOCD的安裝位置修改,stm32f?根據你的芯片修改"C:/Users/CaiYunWei/.eide/tools/openocd_7a1adfbec_mingw32/share/openocd/scripts/target/stm32f4x.cfg"],"searchDir": [],"runToEntryPoint": "main","showDevDebugOutput": "none"}]
}
生成的jlink相關代碼用不到,可以刪掉。
開始調試
搞好之后保存launch.json文件,選擇設置好的啟動項Debug with OpenOCD,加入斷點,即可開始調試
成功
可以在左面查看變量,添加監視等。
導入CubeIDE工程
CubeIDE實際上也是用的arm-gcc的工具鏈。
我這里用cubeMX生成一個來說明。
創建一個CubeIDE工程
導入
導入空的嵌入式gcc項目
項目資源,項目屬性等已經自動添加好了。
構建配置仍需手動修改。
注意生成的flash.ld文件中
.ARM.extab (READONLY) : /* The "READONLY" keyword is only supported in GCC11 and later, remove it if using GCC10 or earlier. */{. = ALIGN(4);*(.ARM.extab* .gnu.linkonce.armextab.*). = ALIGN(4);} >FLASH
它有個關鍵詞需要gcc11以上的版本,目前(2025年1月20日)EIDE下載到的是10!可以刪除相關內容,或者手動更新工具鏈。
之后即可正常編譯。
燒錄、調試等完全一致,見上文。
后記
使用VSCode EIDE開發,不需要其它IDE。
使用arm-gcc完全免費
沒有這個EIDE插件確實能開發,但是要手動配置工具鏈,每次編譯代碼都需要在命令窗口中輸入相應的指令,很麻煩。
按理說,找到對應內核的工具鏈就能開發相應的單片機。
EIDE這個插件能設置的工具鏈挺多的。
CMake現在在C/C++的項目中用的越來越多,建議了解一下。
STM32 VS Code Extension 插件用的是CMake。但它沒有圖形化的配置界面,比如加個文件,得自己寫路徑,比較麻煩。
參考資料
拋棄keil?VScode開發stm32完整教程_嗶哩嗶哩_bilibili
VSCode+EIDE開發CH32V系列RISC-V MCU - Wahahahehehe - 博客園
這是什么? | Embedded IDE For VSCode
cortex-debug 用法 - Blog - Embedded IDE Forum