Step1:
-
安裝VSCode及其相應(yīng)插件福侈,其中VSCode的安裝網(wǎng)上教程非常多酒来,此處就不在贅述。插件選擇C/C++(用于代碼補(bǔ)全和智能提示等)和Cortex Debug(用于調(diào)試癌刽,如果對(duì)自己的編程能力有信心可以不裝)役首。
插件預(yù)覽 - 安裝STM32CubeMX尝丐,同樣網(wǎng)上教程比較多,在此不再贅述衡奥。值得注意的是爹袁,STM32CubeMX安裝前需要有java環(huán)境,因此需要提前安裝矮固。
sudo apt-get install default-jre
Step2:
- 安裝編譯工具鏈gcc-arm-embedded失息,其中包含了用于編譯的arm-none-eabi-gcc和用于Debug的arm-none-eabi-gdb。
sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
sudo apt-get update
sudo apt-get install gcc-arm-embedded
- 安裝GDB Sever档址,該工具往下用于連接jlink或stlink盹兢,往上提供reset,halt守伸,flash等常用功能绎秒,用于程序下載和調(diào)試。此處選用OpenOCD尼摹,使用方便且開(kāi)源见芹。
sudo apt-get install openocd
Step3:
-
利用STM32CubeMX生成stm32工程,在Toolchain/IDE中記得選擇Makefile蠢涝。
Makefile工程 - 修改工程中Makefile文件玄呛,便于VSCode建立tasks調(diào)用程序下載和編譯。在Makefile中最后可增加如下語(yǔ)句:
OPENOCD := openocd -f interface/jlink.cfg \
-c 'transport select swd' \
-f target/stm32f4x.cfg
# download your program
flash: all
$(OPENOCD) -c init \
-c 'reset halt' \
-c 'flash write_image erase $(BUILD_DIR)/$(TARGET).elf' \
-c 'reset run' \
-c exit
注1:此時(shí)應(yīng)該在Terminal中可以make flash直接一步編譯并下載固件了和二。
注2:第一行-f表示的是選擇jlink徘铝,如果不是jlink可以到OpenOCD的scripts目錄下找(如stlink v2.1則可以改為openocd -f interface/stlink-v2-1.cfg),默認(rèn)路徑為/usr/share/openocd/scripts惯吕。第二行因?yàn)槲业膉link僅支持swd模式惕它,所以加上了,實(shí)際如果支持jtag模式是不需要的混埠。第三行選擇的是個(gè)人的芯片配置文件怠缸,同樣可以在OpenOCD的scripts目錄下找到,可根據(jù)自己選擇的芯片進(jìn)行修改钳宪。
Step4:
- 用VSCode打開(kāi)STM32CubeMX新建的工程文件夾,將C/C++插件配置一波(其實(shí)不配置也沒(méi)關(guān)系扳炬,只不過(guò)會(huì)有很多紅色波浪線讓人看著非常不舒服)吏颖,便于智能感知的使用,主要是編譯器路徑和宏定義的配置恨樟。如果gcc-arm-embedded安裝正常半醉,默認(rèn)路徑應(yīng)該是/usr/bin/arm-none-eabi-gcc,也可以使用whereis查看:
smartfish@smartfish:~$ whereis arm-none-eabi-gcc
arm-none-eabi-gcc: /usr/bin/arm-none-eabi-gcc
-
VSCode快捷鍵Ctrl+Shift+p打開(kāi)劝术,搜索C/C++:Edit Configurations (UI)缩多,即可打開(kāi)配置界面呆奕,在Compile path輸入上一步的路徑:
Compile path的路徑 -
宏定義的配置,主要來(lái)源于Makefile文件中所使用的宏定義衬吆,將圖中USE_HAL_DRIVER和STM32F405xx(記得去除-D梁钾,該處的宏定義實(shí)際與個(gè)人的工程有關(guān),我使用的f405的芯片逊抡,所有會(huì)有STM32F405xx這一項(xiàng))填入Defines中:
Makefile中的宏定義
Defines的配置 - VSCode的tasks建立姆泻,同樣使用Ctrl+Shift+p,輸入Tasks:Configure Task冒嫡,即可建立一套空的tasks模板拇勃,實(shí)際上建立tasks的目標(biāo)就是為了一鍵build或者build&&download,如果愿意的話孝凌,直接在terminal中make和make flash也是可以的(反正Makefile也改好了)方咆。下圖是我個(gè)人所使用的task。
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
// 編譯
{
"type": "shell",
"label": "build all",
"command": "make -j8",
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
},
// 清除編譯
{
"type": "shell",
"label": "clear all",
"command": "make clean",
"problemMatcher": []
},
// 全部重新編譯
{
"type": "shell",
"label": "rebuild all",
"dependsOrder": "sequence",
"dependsOn": [
"clear all",
"build all"
],
"problemMatcher": [
"$gcc"
]
},
// 僅下載
{
"type": "shell",
"label": "flash it",
"command": "make -j8 flash",
"dependsOn":[
"build all"
],
"problemMatcher": []
},
// 編譯并下載
{
"type": "shell",
"label": "build and flash",
"dependsOrder": "sequence",
"dependsOn" :[
"build all",
"flash it"
],
"problemMatcher": [
"$gcc"
],
}
]
}
-
task建立好后蟀架,Ctrl+Shift+b即可編譯工程生成elf峻呛,bin和hex等文件。Ctrl+Shift+p后輸入run task回車辜窑,選擇flash it即可實(shí)現(xiàn)下載钩述。
成功編譯
成功下載
Step6:
-
Cortex Debug的配置相對(duì)較為簡(jiǎn)單。首先進(jìn)入調(diào)試界面穆碎,選擇Add Configuration牙勘,選擇Cortex Debug,即可新建一套用于調(diào)試的launch模板所禀。
Debug配置的新建
-
修改上述模板方面,主要是"servertype"和"configFiles"。"servertype"選擇“openocd”色徘,"configFiles"根據(jù)個(gè)人的工程選擇恭金,Step3中的注2已經(jīng)有過(guò)描述,此處不再贅述褂策。由于我的jlink僅支持swd横腿,因此此處會(huì)略有差異。
支持jtag模式的配置
注1:此處添加了一個(gè)"preLaunchTask"和"runToMain"屬性斤寂,前者是為了進(jìn)入調(diào)試模式前先下載一波程序耿焊,后者則是跳過(guò)stm32啟動(dòng)代碼,直接進(jìn)入主函數(shù)開(kāi)始調(diào)試遍搞。
- 配置完成后罗侯,按下F5即可實(shí)現(xiàn)調(diào)試。如需在調(diào)試過(guò)程中查看相應(yīng)寄存器配置溪猿,下載Cortex-Debug: Device Support Pack - ×××(如Cortex-Debug: Device Support Pack - STM32F1)插件即可钩杰。
Step7:
- 完纫塌。