使用VScode开发STM32,主要需解决包含头文件路径的问题。
当我们使用VScode打开一个STM32的工程后,编译器会在包含文件出提示很多错误,显示无法找到文件。
这时我们需要随便找到一处红色波浪线,点击并把光标移到那一行,左上角会出现一个黄色小灯泡。点击黄色小灯泡并选择“编辑‘includePath设置’”。
直接用c_cpp_properties.json
来配置:
VS Code自动在当前目录下的.vscode文件夹下生成一个c_cpp_properties.json文件,我的配置给出如下:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"C:/Program Files (x86)/GNU Arm Embedded Toolchain/9 2020-q2-update/lib/gcc/arm-none-eabi/9.3.1/include",
"${workspaceFolder}/Inc",
"${workspaceFolder}/Drivers/STM32F4xx_HAL_Driver/Inc",
"${workspaceFolder}/Drivers/STM32F4xx_HAL_Driver/Inc/Legacy",
"${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F4xx/Include",
"${workspaceFolder}/Drivers/CMSIS/Include"
],
"defines": [
"USE_HAL_DRIVER",
"STM32F407xx"
],
"compilerPath": "C:/Program Files (x86)/GNU Arm Embedded Toolchain/9 2020-q2-update/bin/arm-none-eabi-gcc.exe",
"intelliSenseMode": "gcc-x64",
"browse": {
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": "",
"path": [
"${workspaceFolder}"
]
}
}
],
"version": 4
}
这个配置是我研究测试很久得到的,保证没问题,下面详细解释几个重要部分:
- “name”:这是用于标记使用的平台的标签。除了win32还可以选Linux或Mac。也就是说,这个json里“configuration“下可以写三组配置,只要每组配置前面写上不同的平台,即可在不同的操作系统上使用就会自动适配不同的配置,非常方便
- "includePath":告诉VS Code该去哪里查找头文件。第一个目录是C语言标准库的目录, 剩下的几个目录直接从Makefile里复制然后稍微修改下即可。
"${workspaceFolder}"
表示项目文件夹; - ”defines“:全局宏定义,告诉VS Code这些宏都被定义了,只是没写在源码中而已。上述多加的两个宏是makefile里的。
- "compilerPath":指定编译器的路径。因为有一些宏是编译器自带的,连makefile里都没有,例如
__GNUC__
。有些教程里会让你在defines里面加上__GNUC__
,但是这是没必要的。只要你指定了编译器路径,所有的编译器自带的宏就都导入了VS Code。 - "intelliSenseMode":因为我们用的是gcc所以选gcc-x64
- "browse.path":源文件搜索路径。据说是用来做代码补全和查找定义的,但是我测试后发现删去也不影响使用,不过还是留着吧。这个路径和includePath不同,browse.path是自动递归所有子目录的。而include.path默认只看本目录。
Ctrl+S保存c_cpp_properties.json文件,发现左边目录里一个红点都没有了,强迫症舒服了!