天天看點

VScode開發STM32

使用VScode開發STM32,主要需解決包含頭檔案路徑的問題。

當我們使用VScode打開一個STM32的工程後,編譯器會在包含檔案出提示很多錯誤,顯示無法找到檔案。

這時我們需要随便找到一處紅色波浪線,點選并把光标移到那一行,左上角會出現一個黃色小燈泡。點選黃色小燈泡并選擇“編輯‘includePath設定’”。

VScode開發STM32

直接用

c_cpp_properties.json

來配置:

VScode開發STM32

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檔案,發現左邊目錄裡一個紅點都沒有了,強迫症舒服了!

繼續閱讀