必备工具的安装下载
vscode,官网直接下载安装,下载地址
gcc-arm-none-eabi,交叉编译工具链,下载地址。安装(解压)完成后,将gcc添加到环境变量,然后可以在cmd中输入arm-none-eabi-gcc -v
查看路径是否正确。
例如我的路径D:\gcc-arm-none-eabi-8-2018-q4-major-win32\bin
,可以看到以下内容:
OpenOCD,一个开源的调试软件,下载地址
下载下来的是一个压缩包,解压以后,需要配置环境变量
例如D:\OpenOCD-20200503-0.10.0\bin
,然后在cmd中输入openocd -v
,应该输出以下内容:
Git for Windows,提供git和minw64指令终端,下载地址
LLVM :用于代码补全,下载地址,安装好之后,将路径添加到环境变量里。例如D:\LLVM\bin
STM32CubeMx,用于生成Makefile文件,避免自己写Makefile,下载地址
编译环境搭建
用STM32CubeMx新建一个工程,STM32Cubemx的使用不多介绍。需要注意的是,最后生成代码的时候,IDE要选择Makefile
:
用VScode打开刚才新建的工程文件,你会看到如下目录:
.vscode文件夹需要我们自己新建,Inc和Src是用户可修改的代码,Drivers是库文件,build是编译后生成的文件夹。
需要给VScode装下面的插件:
将bash配置为vscode的终端
在文件 -> 首选项 -> 设置
打开setting.json文件,添加一下两句:
"terminal.integrated.shell.windows": "D:\\Git\\bin\\bash.exe",
"terminal.external.windowsExec": "D:\\Git\\bin\\bash.exe",
保存以后,按Ctrl + ~
就可以看到bash已经成为vscode的终端了
c_cpp_properties.json
文件,用于对C/C++语言的语法提示等的配置,其中include路径和宏定义可以参照makefile添加。配置如下{
"configurations": [
{
"name": "Win32",
"browse": {
"path": [
"${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include",
"${workspaceFolder}/Drivers/CMSIS/include",
"${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc",
"${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Src",
"${workspaceFolder}/Inc",
"${workspaceFolder}/Src",
"${workspaceFolder}/",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/c++/8.2.1",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/c++/8.2.1/arm-none-eabi/thumb/v7-m",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/c++/8.2.1/backward",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/sys",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/lib/gcc/arm-none-eabi/8.2.1/include",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/lib/gcc/arm-none-eabi/8.2.1/include-fixed"
],
"limitSymbolsToIncludedHeaders": true
},
"includePath": [
"${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include",
"${workspaceFolder}/Drivers/CMSIS/include",
"${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Inc",
"${workspaceFolder}/Drivers/STM32F1xx_HAL_Driver/Src",
"${workspaceFolder}/Inc",
"${workspaceFolder}/Src",
"${workspaceFolder}/",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/c++/8.2.1",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/c++/8.2.1/arm-none-eabi/thumb/v7-m",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/c++/8.2.1/backward",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/arm-none-eabi/include/sys",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/lib/gcc/arm-none-eabi/8.2.1/include",
"D:/gcc-arm-none-eabi-8-2018-q4-major-win32/lib/gcc/arm-none-eabi/8.2.1/include-fixed"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE",
"USE_HAL_DRIVER", //这个是使用hal,可以改为标准库
"STM32F103xE" //芯片的宏
],
"compilerPath": "D:\\LLVM\\bin\\clang-format.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "clang-x64"
}
],
"version": 4
}
在终端下输入make
指令,就可以开始编译了,如下是编译成功的输出
而所有的.o文件也会在build文件夹下边
下边进行调试环境的配置(这些配置网上整理来的,我也没试过,回家没带st-link =.=)
配置launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
"version": "0.2.0",
"configurations": [
{
"cwd": "${workspaceRoot}",
"executable": "./build/usart.elf", //需要换成xxx.elf
"name": "Cortex Debug",
"request": "launch",
"type": "cortex-debug",
"runToMain": true, //是否执行到main函数
"preLaunchTask": "Build Target", //先运行Build任务,因为cortex-debug不会帮我们编译,所以要加上这句
"svdFile": "C:/Users/Thee/.vscode/extensions/marus25.cortex-debug-dp-stm32f1-1.0.0/data/STM32F103xx.svd",
"servertype": "openocd",
"configFiles": [
"./Debugger/cmsis-dap.cfg",
"./Debugger/stm32f1x.cfg"
]
}
]
}
task.json,用于cortex的任务配置,一键下载,调试。我还没试过就不写了