引言
前段时间在使用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好用亿点点!!!