前段時間在使用keil5編寫stm32相關代碼的時候,奇怪的代碼補全機制很讓人抓狂,於是想到了之前一直使用的vscode,就想着將編輯代碼的環節轉移到vscode中,而編譯與燒寫的過程仍然通過keil5軟件完成。
最開始在網絡上查到的一種方式是僅僅將vscode作為keil5的外部編輯器,但在實際使用過程中,這種方法並不能完成函數的補全。vscode作為“宇宙最強編輯器”(doge)很顯然發揮不出來他的真正威力。於是繼續查找,又想到stm32程序由c/c++編寫,於是去查了相關文檔,發現了通過配置文件c_cpp_properties.json可以實現相關代碼的智能補全。
實現步驟
1. 使用`keil5`新建好工程
2. 在工程根目錄新建文件夾` .vscode`
3. 在` .vscode `文件夾內新建文件` c_cpp_properties.json`
4. 將下列代碼復制進` c_cpp_properties.json`
{ "configurations": [ { "name": "STM32", "includePath": [ "D://keil_v5/ARM/ARMCC/**", //這里修改為相應的keil5文件目錄 "${workspaceFolder}/**" ], "browse": { "limitSymbolsToIncludedHeaders": true, "databaseFilename": "${workspaceRoot}/.vscode/.browse.c_cpp.db", "path": [ "D://keil_v5/ARM/ARMCC/**", "${workspaceFolder}/**" ] }, "defines": [ "_DEBUG", "UNICODE", "_UNICODE", "__CC_ARM", "USE_STDPERIPH_DRIVER", "STM32F10X_HD" ], "intelliSenseMode": "msvc-x64" } ], "version": 4 }
代碼解釋
configuration:該組配置了補全引擎的相關信息。下文未提到的相關信息都可以從上文中的官方文檔查到。
${workspaceFolder} :工作目錄。
${workspaceFolder}/** 中的 **表示在該目錄下進行遞歸搜索,不填寫的話,搜索引擎默認不進行遞歸搜索
name:任意的名字。改名字是為了辨別當前的配置信息。
includePath:指定補全引擎進行搜索時從哪些目錄下搜索。
browse:該組內的配置信息主要在 Go To Definition/Declaration 起作用,告知實現跳轉功能的引擎應該去哪里尋找相關文件。
- path:與 includePath 設置成一樣的就可以。
- limitSymbolsToIncludedHeaders: 如果有部分文件不能正常跳轉,可以嘗試將該項設置為false,一般設置為true。
- databaseFilename: 照抄即可
defines:該項包含了keil5中宏定義的部分,例如在keil5 options for target 中定義的 USE_STDPERIPH_DRIVER 就要寫在這里。上文defines中的前五項照抄即可,最后一項根據實際情況修改。
keil5中為何要定義 USE_STDPERIPH_DRIVER 和 STM32F10X_HD 可以參考下面兩篇文章。
STM32為什么要在C/C++配置里寫USE_STDPERIPH_DRIVER詳解
STM32標准外設庫中USE_STDPERIPH_DRIVER, STM32F10X_MD的含義
intelliSenseMode:將補全的智能感知模式映射到相關的編譯器變體上。不同平台有不同的默認值。
- Windows: msvc-x64
- Linux: gcc-x64
- macOS: clang-x64
version:相當於該文件的識別碼,便於軟件識別該文件同時確定如何去解析該文件。該參數直接照抄即可。官方文檔中不推薦修改該信息。
結語
到此就結束了文件的配置。完成后工程根目錄如圖所示。
