- 最近重新捡起了STM32的开发工作,由于之前一年多的时间一直在从事PC端与Linux下的开发,习惯了VSCode的开发界面以及各种方便的插件,再次打开keil的界面时倍感丑陋。于是花了不少心思配置了VSCode中的代码编写环境,再次特做记录。

Keil编译与下载插件
VSCode的插件商店中其实包含了支持Keil的插件Keil Assistant,这个插件可以理解为用VSCode给Keil做了一个套壳外衣,可以直接在VSCode的插件商店搜索安装:

值得注意的是,正常使用编译以及下载功能,仍然需要电脑上安装有KeilV5,这里就不在记录详细的安装过程了。插件安装完成后,点击插件旁边的设置按钮,即可设置对应的keil编译器的路径,示例如下:D:\software\Keil_V5\UV4\UV4.exe
由于我不作C51的开发,因此也没有配置相关路径。此后,便可以在VSCode的资源管理器中找到Keil Project的条目:
如果要打开keil项目,通过右侧的添加按钮打开文件浏览选择keil的工程项目uvprojx文件即可
此后,只需要在keil中配置好debug等设备信息,就可以完全在VSCode中进行代码编写与编译下载了。
其他Debug
目前为止我在完成上述配置后,遇到了两个bug,一并记录在此,如果后续遇到新的问题,我会及时更新。
头文件索引报错
如果仅仅通过Keil Uvision Project打开了工程项目,可能会出现如下的头文件波浪线报警,但是此时按照上述方式编译工程没有任何问题:
这个报错其实是来自VSCode的C/C++插件,由于没有打开项目的文件夹,因此C/C++找不到对应的头文件(Keil插件本身的文件索引是不能提供给C++插件的),此时只需要在VSCode中打开项目的完整文件夹即可
这时检查一下.vscode文件夹下的c_cpp_properties.json文件即可
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
// "D:\\software\\Keil_V5\\ARM\\ARMCC\\bin"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE",
"USE_STDPERIPH_DRIVER"
],
"compilerPath": "D:\\software\\mingw64\\bin\\gcc.exe",
"cStandard": "c17",
"cppStandard": "gnu++14",
"intelliSenseMode": "windows-gcc-x64"
}
],
"version": 4
}
注意"includePath"条目下的内容即可
GPIO结构体等关键字报错
在解决了头文件索引的报错后,可能还会出现如下报错:

而在keil的文件树中可以看到,该文件在keil中是链接了对应的stm32f10x_acc.h等头文件的
因此怀疑仍然是C/C++插件的索引问题,因此我手动在adc.c的文件前方加了两行include,发现波浪线报警大大减少:
那么为什么在keil中adc文件不会报错呢?这些头文件又是如何自动引用的?
原因是在stm32f10x.h头文件中,当定义了USE_STDPERIPH_DRIVER宏定义时,便会引入stm32f10x_conf.h头文件,
stm32f10x_conf.h头文件的内容如下
也就是说当我们引stm32f10x.h并且提前定义了USE_STDPERIPH_DRIVER”\宏定义,就不需要再引入stm32f10x_xxx.h的固件库头文件,在Keil中是在C/C++预处理器设置的USE_STDPERIPH_DRIVER宏定义
最后的解决方案是:在VSCODE中,在c_cpp_properties.json中的defines字段添加预处理宏即可
文章介绍了如何在VSCode中配置Keil插件进行STM32的开发,包括设置Keil编译器路径,解决头文件索引和GPIO结构体等关键字的报错问题,以及如何通过预处理宏定义解决固件库头文件的引用问题。
1万+

被折叠的 条评论
为什么被折叠?



