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

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

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

使用VSCode搭建STM32開發(fā)環(huán)境

嵌入式悅翔園 ? 來源:嵌入式悅翔園 ? 作者:暖暖的糾結(jié) ? 2022-10-10 15:04 ? 次閱讀

首先附上一張VS Code圖一直都喜歡這種,黑色主題感覺高大上。

f849c1c0-4859-11ed-a3b6-dac502259ad0.png

一、需要的軟件和工具。

下載最新版VS Code: 安裝好插件,具有良好的代碼補全與調(diào)試功能。

“VS Code下載地址:https://code.visualstudio.com/”

下載 LLVM:用于代碼補全,其實可以理解為 Clang。因為VS Code 中“C/C++”插件的自動補全功能不太好用。STM32中好多庫函數(shù)都補全不出來。記得按照好之后,將路徑添加到環(huán)境變量里。

“LLVM下載地址:http://releases.llvm.org/download.html”

下載安裝 Git for Windows: 提供Git支持和MINGW64指令終端。

“Git下載地址:https://gitforwindows.org/”

下載安裝 arm-none-eabi-gcc:選擇gcc-arm-none-eabi-5\_4-2016q3-20160926-win32.exe (md5)這里是一個2016年的,我目前也是用的這個,好像還有其他的新版的下載,GNU Arm Embedded Toolchain。正常安裝后,記得需要將軟件的安裝目錄下的bin文件夾設置進入環(huán)境變量PATH中。

“arm-none-eabi-gcc下載地址:https://launchpad.net/gcc-arm-embedded/+download”

下載 OpenOCD for Windows:一個開源的片上調(diào)試器(Open On-Chip Debugger)。在Windows下自己編譯可能有問題 。所以,我們選擇編譯好的。下載后的文件不是安裝包,把程序文件夾放入自己的軟件安裝目錄下,將軟件的bin文件夾路徑加入用戶環(huán)境變量PATH中。

“OpenOCD下載地址:http://gnutoolchains.com/arm-eabi/openocd/”

STM32CubeMX:用于生成帶makefile的工程。這樣我們就可以不用自己寫MakeFile了。套用他的模板,然后修改為自己的目錄就可以。

“STM32CubeMX鏈接:http://www.stm32cube.com/”

二、搭建編譯環(huán)境

1. 用STM32Cube創(chuàng)建工程。

STM32CubeMX生成的是用HAL庫開發(fā)的項目,具體怎么配置這里就不介紹了,只介紹與主題有關(guān)的部分。

(1)STM32CubeMx芯片包(固件庫)下載,注意事項:

f874a4e4-4859-11ed-a3b6-dac502259ad0.png

需要選擇help -> updater settings ->Connection Parameters設置好網(wǎng)絡后,才能下載固件包。

(2)生成工程。選擇MakeFile選項。

注意: 4.18.0以下的版本是沒有Makefile這個選項的。最后下載一個中間版本,因為5.0以上的版本界面很亂。我選擇的是 4.27.0.

f888f35e-4859-11ed-a3b6-dac502259ad0.png

2.配置VS Code

(1)打開工程所在的文件夾。在右鍵“用VS Code打開工程文件夾”,

f8ac9976-4859-11ed-a3b6-dac502259ad0.png
你將會看到這樣的目錄結(jié)構(gòu)

f8c08e90-4859-11ed-a3b6-dac502259ad0.png

.ioc文件是STM32Cube的工程文件,Inc和Src是供用戶修改的源碼,Driver里是STM32和ARM CMSIS的庫,最好不要修改。

不過,如果你要采用標準庫開發(fā)的話,就修改為標準庫的Driver.

(2)安裝VS Code插件,需要這幾樣:

f8e27b90-4859-11ed-a3b6-dac502259ad0.png
f9046fca-4859-11ed-a3b6-dac502259ad0.png

(3)配置VS Code內(nèi)置終端

這里將我們上面安裝的 Git for Windows 設置為VScode 的內(nèi)置終端。

文件–首選項–設置,搜索terminal,設置內(nèi)置終端的Shell為Bash(安裝VS Code的時候它會推薦你安裝Git,里面有這個Bash)?;蛘叽蜷_ Settings.json添加下面兩句。


"terminal.integrated.shell.windows":"D:\ProgramFiles\Git\bin\bash.exe",
"terminal.external.windowsExec":"D:\ProgramFiles\Git\bin\bash.exe"

然后按Ctrl+` 就可以打開終端,看到Bash了

f914ec92-4859-11ed-a3b6-dac502259ad0.png

(4)配置智能補全、智能感知插件。

前面我們安裝了 LLVM 用它來實現(xiàn)智能補全,與糾錯,自然就需要一個路徑去尋找這些文件。因此我們需要一個。c\_cpp\_properties.json文件的配置文件。

我們在當前目錄的.vscode文件夾下創(chuàng)建c\_cpp\_properties.json配置文件,用來告訴VS Code我們定義的宏與文件的路徑。

{
"configurations":[
{
"name":"Win32",
"browse":{
"path":[
"${workspaceFolder}/",
"${workspaceFolder}/Drivers/CMSIS",
"${workspaceFolder}/Drivers/FWlib/inc",
"${workspaceFolder}/Drivers/CMSIS/startup",
"${workspaceFolder}/User/inc",
"${workspaceFolder}/User",
"${workspaceFolder}/ThirdParty/crclib/include"
],
"limitSymbolsToIncludedHeaders":true
},
"includePath":[
"${workspaceFolder}/",
"${workspaceFolder}/",
"${workspaceFolder}/Drivers/CMSIS",
"${workspaceFolder}/Drivers/FWlib/inc",
"${workspaceFolder}/Drivers/CMSIS/startup",
"${workspaceFolder}/User/inc",
"${workspaceFolder}/User",
"${workspaceFolder}/ThirdParty/crclib/include"
],
"defines":[
"_DEBUG",
"UNICODE",
"_UNICODE",
"__CC_ARM",
"USE_STDPERIPH_DRIVER",
"STM32F10X_HD"
],
"compilerPath":"C:\ProgramFiles\LLVM\bin\clang-format.exe",
"cStandard":"c11",
"cppStandard":"c++17",
"intelliSenseMode":"clang-x64"
}
],
"version":4
}

注意:如果提示variable “uint32\_t” is not a type name不是一個type類型。

則需要 添加宏定義\_\_CC\_ARM,如果沒有該宏定義,則uint32\_t類型會報錯。并且結(jié)構(gòu)體中使用了uint32\_t定義的成員,也會補全不了。

(5)編譯程序

gcc下編譯過程如下圖所示:

.c文件 經(jīng)過 arm-none-eabi-gcc 編譯成 .o文件

.s文件 經(jīng)過 arm-none-eabi-as 編譯成 .o文件

.o文件 和 .a文件 經(jīng)過 arm-none-eabi-ld 鏈接成 .elf文件

.elf文件 經(jīng)過 arm-none-eabi-objcopy 和 arm-none-eabi-objdump 轉(zhuǎn)換成 hex文件/dis文件

arm-none-eabi-gdb 使用 .elf文件 進行debug

f9331082-4859-11ed-a3b6-dac502259ad0.png

在Terminal下輸入make指令,即會開始build程序

f9513c4c-4859-11ed-a3b6-dac502259ad0.png

編譯完成后,生成的所有文件都會放在Build文件夾下.

f9653242-4859-11ed-a3b6-dac502259ad0.png
注意: 由于我安裝了 Qt. Qt中自帶了 mingw32-make.exe。我把這個文件復制了一份,重命名為make.exe。并且添加進了環(huán)境變量中。因此我可以直接使用 make。

如果你沒有 make 的環(huán)境??梢韵螺d一個choco包管理器,它類似于linux下的apt,只不過是windows下使用的。然后用choco安裝make即可:
f97a0fa0-4859-11ed-a3b6-dac502259ad0.png

如果改了source code,需要重新編譯程序,那就得先執(zhí)行make clean指令去刪除之前build好的所有東西。然后重新執(zhí)行make指令即可。

三、搭建調(diào)試環(huán)境

1.配置openocd。

要運行openocd這個gdb server,需要配置如下幾個參數(shù)

用什么仿真器?(J-link, ST-link…)

用什么接口?(JTAG, SWD…)

目標芯片是什么?(STM32F4x, tm4c123g…)

首先我們打開openocd的安裝目錄,打開share/openocd/scripts,里面有很多提前寫好的配置文件。
f9857822-4859-11ed-a3b6-dac502259ad0.png
target里存放目標芯片的配置文件,例如stm32f4.cfg

interface里存放仿真器相關(guān)的配置文件,例如jlink.cfg,stlink.cfg.

當我們啟動openocd時,可以用-f參數(shù)來指定一個配置文件。例如:

openocd–finterface/stlink.cfg–ftarget/stm32f4.cfg

【注】配置仿真器的參數(shù)必須在配置目標MCU的參數(shù)之前,否則將報錯。

如果我們不帶參數(shù)啟動,openocd就會自動查找當前目錄下有沒有名為openocd.cfg的文件,并把它作為配置文件來啟動。因此,我們就在當前工程下創(chuàng)建一個名為openocd.cfg的文件。

fa019c7c-4859-11ed-a3b6-dac502259ad0.png

我們選擇使用ST-link,SWD接口,目標芯片為stm32f1x。

(PS:這里注釋掉了SWD接口,如果采用Jlink 則需要SWD接口)。

這樣,我們連好板子上好電,直接在終端里敲openocd,即可啟動。

fa245226-4859-11ed-a3b6-dac502259ad0.png

openocd運行時,這個shell終端就被占用了,我們一會要新開一個終端。

2.用gdb連接上openocd

(1)直接啟動gdb,參數(shù)為編譯好的調(diào)試文件(.elf)
fa3915f8-4859-11ed-a3b6-dac502259ad0.png
(2)使gdb連接上openocd 前面已經(jīng)說過openocd留給gdb的TCP/IP端口是3333,因此輸入:

targetremotelocalhost:3333

fa4d8c4a-4859-11ed-a3b6-dac502259ad0.png

注意,在連接openocd的時候,一定需要先運行 openocd 服務才能通信上,否則一直出現(xiàn) taget remote 錯誤。

(3)下載代碼.

fa705068-4859-11ed-a3b6-dac502259ad0.png
后面就和普通的gdb一樣操作了,加斷點,單步運行什么的,網(wǎng)上可以搜到很多教程。

【注】 最后記得輸入q來退出gdb,以免影響后面的配置。

3.配置openocd任務與build任務

為了避免每次都在終端輸入 make 和 make clean ,與 openocd 。我們可以在VSCode 中,建立一個 Task 來幫我們完成這個任務,

(1)在當前目錄下創(chuàng)建build.py的文件。

fa9fdef0-4859-11ed-a3b6-dac502259ad0.png

(2)在VSCode界面下,單擊“任務”,選擇“配置任務”

按 F1,選擇"配置任務" .vscode目錄下就會創(chuàng)建一個tasks.json配置文件.
fab5bb26-4859-11ed-a3b6-dac502259ad0.png
打開 tasks.json ,修改內(nèi)容如下:
fad20e5c-4859-11ed-a3b6-dac502259ad0.png
注意上面是兩個任務,一個是openocd.用于連接st-link調(diào)試。一個是 build 用于編譯。

它相當于是創(chuàng)建了一個名為build的任務,任務的內(nèi)容是在shell里面執(zhí)行 python build.py這個命令。只是不用我們手動輸入而已。

4.配置VS Code的調(diào)試功能

使用VS Code,肯定是圖方便,圖好看。所以我肯定不會讓大家靠敲命令來調(diào)試,這樣豈不是開倒車,還不如用keil。因此,這里要配置VS Code的調(diào)試功能,相當于對gdb的一個圖形化吧。

在VS Code內(nèi)選擇debug(就是左邊那個蟲子圖標),選擇“添加配置”,類型為GDB。就會在.vscode文件夾下生成launch.json配置文件。
按照下面來配置:

{



"version":"0.2.0",
"configurations":[

{
"name":"ARMDebug",
"type":"cppdbg",
"request":"launch",
"program":"${workspaceFolder}/Build/STM32F103RC_Template.elf",
"args":[],
"stopAtEntry":false,
"cwd":"${workspaceFolder}",
"environment":[],
"externalConsole":false,
"MIMode":"gdb",
"miDebuggerPath":"C:\ProgramFiles(x86)\GNUToolsARMEmbedded\5.42016q3\bin\arm-none-eabi-gdb.exe",
"targetArchitecture":"arm",
"setupCommands":[
{
"description":"選擇調(diào)試文件(.elf)到gdb",
"text":"fileE:/VScode/STM32_VSCode/stm32f103_temp/Build/STM32F103RC_Template.elf",
"ignoreFailures":false
},
{
"description":"連接GDBServer",
"text":"targetremotelocalhost:3333",
"ignoreFailures":false
},
{
"description":"ResetMCU",
"text":"monitorreset",
"ignoreFailures":false
},
{
"description":"Halt",
"text":"monitorhalt",
"ignoreFailures":false
},
{
"description":"下載代碼到MCU",
"text":"load",
"ignoreFailures":false
}
],
"preLaunchTask":"build",
}
]
}

可以看到,setupCommands里面就是我們之前試用gdb時操作過的流程:連接GDB Server——reset——halt——下載代碼。

而preLaunchTask中是我們之前在tasks.json中配置的build任務。它可以讓我們每次調(diào)試時都先編譯一遍。

保存后,隨便打幾個斷點,按下F5,就可以快樂調(diào)試了??梢钥吹焦δ苓€是很齊全的。
faea27d0-4859-11ed-a3b6-dac502259ad0.png
【注意】:在進行調(diào)試的時候,需要先 按 F1 --> 任務:運行任務里選擇 openocd 任務運行。
fb0320aa-4859-11ed-a3b6-dac502259ad0.png

因為調(diào)試,需要連接st-link進行調(diào)試,而openocd任務是開啟st-link的服務。這樣客戶端才能連接上。

否則會一直出現(xiàn) target remote localhost:3333 的錯誤。

【注】 這里有一個問題我一直沒有解決,就是setupCommands里,用file選擇調(diào)試用的elf文件時,必須用文件的絕對路徑。我試過用${workspaceFolder}/build/xxx.elf和./build/xxx.elf都不行,都找不到文件,不知道是不是windows路徑分割符是””導致的。具體的后續(xù)再完善。

審核編輯:湯梓紅

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

    關(guān)注

    2257

    文章

    10828

    瀏覽量

    352468
  • 開發(fā)環(huán)境
    +關(guān)注

    關(guān)注

    1

    文章

    215

    瀏覽量

    16519
  • vscode
    +關(guān)注

    關(guān)注

    1

    文章

    152

    瀏覽量

    7558

原文標題:手把手帶你使用VSCode 搭建 STM32開發(fā)環(huán)境!

文章出處:【微信號:嵌入式悅翔園,微信公眾號:嵌入式悅翔園】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    使用VSCode搭建STM32開發(fā)環(huán)境

    下載后的文件不是安裝包,把程序文件夾放入自己的軟件安裝目錄下,將軟件的bin文件夾路徑加入用戶環(huán)境變量PATH中。
    的頭像 發(fā)表于 10-08 09:55 ?2412次閱讀

    VSCODE+STM32開發(fā)環(huán)境搭建方式

    史上最簡單的VSCODE+STM32開發(fā)環(huán)境搭建方式——基于IoT_Link寫在前邊現(xiàn)在用MDK開發(fā)ST
    發(fā)表于 08-03 08:20

    VSCode搭建STM32開發(fā)環(huán)境

    VSCode搭建STM32開發(fā)環(huán)境
    發(fā)表于 08-24 06:56

    求大佬分享基于IoT Link的VSCODE+STM32開發(fā)環(huán)境搭建方式

    求大佬分享基于IoT Link的VSCODE+STM32開發(fā)環(huán)境搭建方式
    發(fā)表于 10-11 09:18

    VSCode搭建類似Keil的開發(fā)環(huán)境

    強大的編輯器之后,就再也回不去了。再次面對Keil時,感覺keil的代碼編輯或者閱讀代碼的功能實在是太不友好了,所以已經(jīng)習慣不了Keil了。于是,想著能不能在VSCode搭建類似Keil的開發(fā)
    發(fā)表于 11-19 07:44

    基于vscode編輯器的stm32 Arduino開發(fā)環(huán)境如何去搭建

    怎樣去下載并安裝vscode開發(fā)環(huán)境呢?基于vscode 編輯器的stm32 Arduino開發(fā)
    發(fā)表于 01-24 07:47

    如何搭建VSCode開發(fā)環(huán)境?

    如何搭建VSCode開發(fā)環(huán)境
    發(fā)表于 02-11 08:10

    VSCode搭建STM32單片機開發(fā)環(huán)境

    強大的編輯器之后,就再也回不去了。再次面對Keil時,感覺keil的代碼編輯或者閱讀代碼的功能實在是太不友好了,所以已經(jīng)習慣不了Keil了。于是,想著能不能在VSCode搭建類似Keil的開發(fā)
    發(fā)表于 11-13 11:06 ?15次下載
    <b class='flag-5'>VSCode</b><b class='flag-5'>搭建</b><b class='flag-5'>STM32</b>單片機<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>

    STM32 軟件開發(fā)環(huán)境搭建

    STM32 軟件開發(fā)環(huán)境搭建
    發(fā)表于 11-13 16:51 ?25次下載
    <b class='flag-5'>STM32</b> 軟件<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>搭建</b>

    使用 rust 開發(fā) stm32開發(fā)環(huán)境搭建

    使用 rust 開發(fā) stm32開發(fā)環(huán)境搭建
    發(fā)表于 11-18 19:36 ?51次下載
    使用 rust <b class='flag-5'>開發(fā)</b> <b class='flag-5'>stm32</b>:<b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b><b class='flag-5'>搭建</b>

    STM32 搭建開發(fā)環(huán)境

    STM32 搭建開發(fā)環(huán)境
    發(fā)表于 12-08 14:36 ?20次下載
    <b class='flag-5'>STM32</b> <b class='flag-5'>搭建</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>

    如何利用VSCode 搭建STM32開發(fā)環(huán)境

    下載 LLVM:用于代碼補全,其實可以理解為 Clang。因為VS Code 中“C/C++”插件的自動補全功能不太好用。STM32中好多庫函數(shù)都補全不出來。記得按照好之后,將路徑添加到環(huán)境變量里。
    發(fā)表于 10-20 09:47 ?5139次閱讀

    VSCode搭建STM32開發(fā)環(huán)境的一些常規(guī)且使用的功能

    文件–首選項–設置,搜索terminal,設置內(nèi)置終端的Shell為Bash(安裝VS Code的時候它會推薦你安裝Git,里面有這個Bash)?;蛘叽蜷_ Settings.json添加下面兩句。
    的頭像 發(fā)表于 10-20 14:14 ?1693次閱讀

    VScode+keil開發(fā)環(huán)境搭建安裝使用過程

    這篇文章主要介紹了VScode + keil開發(fā)環(huán)境搭建及安裝使用過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下。
    的頭像 發(fā)表于 10-21 09:19 ?4799次閱讀

    基于VSCode搭建STM32開發(fā)環(huán)境

    眾所周知,Keil是一款收費軟件,雖然可以Po解使用,但很多公司還是有點害怕,想必有不少讀者都收到過**函。
    的頭像 發(fā)表于 09-26 09:55 ?1947次閱讀
    基于<b class='flag-5'>VSCode</b><b class='flag-5'>搭建</b><b class='flag-5'>STM32</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>環(huán)境</b>