引言
前段時間在使用keil5編寫stm32相關代碼的時候,奇怪的代碼補全機制很讓人抓狂,於是想到了之前一直使用的vscode,就想着將編輯代碼的環節轉移到vscode中,而編譯與燒寫的過程仍然通過keil5軟件完成。
准備過程
最開始在網絡上查到的一種方式是僅僅將vscode作為keil5的外部編輯器,但在實際使用過程中,這種方法並不能完成函數的補全。vscode作為“宇宙最強編輯器”(doge)很顯然發揮不出來他的真正威力。於是繼續查找,又想到stm32程序由c/c++編寫,於是去查了相關文檔,發現了通過配置文件c_cpp_properties.json可以實現相關代碼的智能補全。
實現步驟
- 使用keil5新建好工程
- 在工程根目錄新建文件夾
.vscode
- 在
.vscode
文件夾內新建文件c_cpp_properties.json
- 將下列代碼復制進
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
可以參考下面兩篇文章。
http://openedv.com/forum.php?mod=viewthread&tid=229746&highlight=USE%5C_STDPERIPH%5C_DRIVER
https://www.cnblogs.com/TrueElement/archive/2012/09/06/2673208.html
intelliSenseMode
將補全的智能感知模式映射到相關的編譯器變體上。不同平台有不同的默認值。
- Windows: msvc-x64
- Linux: gcc-x64
- macOS: clang-x64
version
相當於該文件的識別碼,便於軟件識別該文件同時確定如何去解析該文件。該參數直接照抄即可。官方文檔中不推薦修改該信息。
結語
到此就結束了文件的配置。完成后工程根目錄如圖所示。
補全功能如下所示。
真的比keil5好用億點點!!!