当我在STM32项目上编程时,VSCode不断在代码#include "main.h"
下划线,原因如下:
检测到 #include 错误。请更新您的包含路径。此翻译单元禁用波浪线。 无法打开源文件"stm32f1xx.h"("main.h"的依赖项)
但是,我仔细检查了我的c_cpp_properties.json
,发现没有任何问题。同时,VSCode 为我提供了快速修复方法,将${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F1xx/Include
添加到includePath
参数中,这也不起作用。
以下是我的配置。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE",
"USE_HAL_DRIVER",
"STM32F103xE"
],
"cStandard": "c17",
"cppStandard": "c++17",
"compilerPath": "C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.07\bin\arm-none-eabi-gcc.exe",
"intelliSenseMode": "gcc-arm"
},
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE",
"USE_HAL_DRIVER",
"STM32F103xE"
],
"cStandard": "c17",
"cppStandard": "c++17",
"compilerPath": "/opt/ARM/gcc-arm-none-eabi-10.3-2021.10/bin/arm-none-eabi-gcc",
"intelliSenseMode": "gcc-arm"
}
],
"version": 4
}
并且所需的文件/Drivers/CMSIS/Device/ST/STM32F1xx/Include/stm32f1xx.h
确实存在,并且也可以正确完成make
的编译。
我已经多次检查文件,但没有发现任何问题,如下所示:
在此处输入图像描述
你必须告诉 vscode 在哪里可以找到所需的所有包含文件.
当您将包含文件夹添加到includePath
时,文件夹内包含的标头可能包含来自其他地方的其他标头。这可以解释为什么在向includePath
添加单个路径后仍然收到错误。
使用 CubeMX 生成的项目通常具有多个包含文件夹。
您的配置文件应如下所示
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/Core/Inc/**",
"${workspaceFolder}/Drivers/STM32F0xx_HAL_Driver/Inc/**",
"${workspaceFolder}/Drivers/STM32F0xx_HAL_Driver/Inc/Legacy/**",
"${workspaceFolder}/Drivers/CMSIS/Include/**",
"${workspaceFolder}/Drivers/CMSIS/Device/ST/STM32F0xx/Include/**"
],
"defines": ["STM32F031x6","USE_HAL_DRIVER"],
"compilerPath": "path_to_compiler",
"cStandard": "gnu17",
"cppStandard": "gnu++14",
"intelliSenseMode": "linux-gcc-x64"
}
],
要找到所需的文件夹,您必须执行此操作:
使用生成文件
如果你有一个有效的 Makefile,它可能包含一个定义使用的头文件的地方,例如:
C_INCLUDES =
-IDrivers/STM32F0xx_HAL_Driver/Inc
-IDrivers/STM32F0xx_HAL_Driver/Inc/Legacy
-IDrivers/CMSIS/Device/ST/STM32F0xx/Include
-IDrivers/CMSIS/Include
使用 Vscode 智能感知
如果缺少标头,Vscode 将显示以下错误
cannot open source file "HEADER2.h" (dependency of "HEADER1.h")
这意味着HEADER2.h
包含在HEADER1.h
中,但includePath
中没有HEADER2.h
。
因此,您应该找到包含HEADER2.h
的文件夹并添加它.
为此,您可以使用项目根目录中的find . -name "HEADER2.h"
。