看这个链接就可以了,后面下载调试有点问题看下3.3。
在VSCode上部署STM32F1的开发环境
借助正确的编译工具链进行编译,
编译工具链使用GCC的ARM版本 arm-none-eabi-gcc ,
安装后cmd输入arm-none-eabi-gcc -v查看是否安装成功
各版本arm-gcc区别与安装
make,安装MinGW64附带make,
安装后cmd输入mingw32-make -v
或make -v
查看是否安装成功
cmd切换到工程根目录下,输入make
或mingw32-make
,make指令可以自己找到Makefile文件进行编译(编译的时候记得确认下Makefile里配置的.c文件和头文件路径是否全了),编译成功标志在build文件加下产生了.elf/.bin/.hex
文件。
可以把编译生成的文件通过STLink Utility或者串口编程下载到单片机上运行。
STM32 ST-LINK Utility使用说明
终端 -> 配置任务 -> 使用模板创建task.json -> Other
,生成.vscode文件夹,里面tasks.json文件,文件下tasks数组里每个对象都代表一个任务。(注:下载的话也可直接用STLink Utility下载上面文件)
调试使用 GDB:调试器,使用OpenOCD将GDB和在线调试器连接。
OpenOCD:搭建了一个GDB Server,联通了硬件调试器和GDB,通过USB和硬件调试器连接,并通过TCP和GDB连接。
win下OpenOCD已经编译好的二进制文件,下载并把OpenOCDd bin文件夹加到系统环境变量里。
OpenOCD下载
用到的
share/openocd/scripts/target
:目标平台配置文件
share/openocd/scripts/interface
:使用的调试器接口配置文件
task.json内容: 前两个任务分别是build项目,生成二进制文件,通过openocd烧录到开发板中。第三任务是打开openocd,应该用不到的,后面会使用Cortex-Debug插件加调试的launch.json文件
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"type": "shell",
"command": "mingw32-make",
"args": [
"-j4"
],
"problemMatcher":["$gcc"],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"dependsOn":"Build",
"type": "shell",
"label": "Burn",
"command": "openocd",
"args": [
"-f",
"interface/stlink.cfg",
"-f",
"target/stm32l4x.cfg",
"-c",
"program build/${workspaceFolderBasename}.elf verify reset exit"
//"program build/Template_l412.hex reset exit 0x08000000"
],
"detail": "Burn with OpenOCD"
},
{
"type": "shell",
"label": "OpenOCD",
"command": "openocd",
"args": [
"-f",
"interface/stlink.cfg",
"-f",
"target/stm32l4x.cfg"
],
"detail": "start OpenOCD and wait for gdb"
}
]
}
然后 F1
(终端)-> 任务 ->运行任务 选择task.json里配置的几个任务执行
运行 -> 添加配置 ->Cortex Debug 产生launch.json文件
launch.json文件修改一下内容:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Cortex Debug",
"cwd": "${workspaceRoot}", //输出路径
"executable": "./build/${workspaceFolderBasename}.elf",
"request": "launch",
"type": "cortex-debug",
"servertype": "openocd", //调试器选择
"device": "STM32L412KB",
"interface": "swd",
"configFiles": ["C:/Program Files/OpenOCD-20210729-0.11.0/share/openocd/scripts/interface/stlink.cfg","C:/Program Files/OpenOCD-20210729-0.11.0/share/openocd/scripts/target/stm32l4x.cfg"],
"runToMain": false,
"preLaunchTask": "Build", //在调试前预先执行的任务,此处是task.json中的
//"armToolchainPath":"C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.07\bin" //如果ARM的工具链路没有添加到系统环境变量的话,则需要
}
]
}
坑:两个json文件中烧录的文件和调试的文件一定选择.elf的,用hex或者bin都会出现各种恶心的错误,用elf的就可以烧录调试了。
把syscalls.c文件
加到工程里就可以了,这个文件在STM32的example串口项目里。然后在Makefile文件里添加下.c。添加这个文件如果有头文件找不到报错,就在c_cpp_properties.json里添加下包含路径。
硬件:STLlink / JLink / eLink(含串口)
注:根据这个不同OpenOCD选择对应的目录下的 *.cfg 文件
…\OpenOCD-20210729-0.11.0\share\openocd\scripts\interface
eLink没有自己创建个 elink_dap.cfg 文件
adapter driver cmsis-dap
transport select swd
硬件:CH340
接线:TX RX GND
~/.platformio/packages/tool-openocd/scripts/target/stm32f1x.cfg
set _CPUTAPID 0x1ba01477
改为set _CPUTAPID 0x2ba01477
STM32开发之 VS Code + GDB下载调试
此外可以通过IOT Link插件来更加简单:这个插件安装在最近的VSCode1.60.x不能用,使用VSCode1.52.1可以,要关闭VSCode的更新,编译可以,我调试好像没弄好。大体跟前面的一样执行那些命令。
史上最简单的VSCODE+STM32开发环境搭建方式——基于IoT Link
[交流吐槽] 关于VS Code自动更新后导致IoT Link扩展插件不可用的问题