前段时间在使用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:相当于该文件的识别码,便于软件识别该文件同时确定如何去解析该文件。该参数直接照抄即可。官方文档中不推荐修改该信息。
结语
到此就结束了文件的配置。完成后工程根目录如图所示。