【STM32】Keil V5与VSCode联合配置代码编写与下载环境,解决报错问题

目录

  • Keil编译与下载插件
  • 其他Debug
  • 头文件索引报错
  • GPIO结构体等关键字报错
  • 最近重新捡起了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字段添加预处理宏即可

    物联沃分享整理
    物联沃-IOTWORD物联网 » 【STM32】Keil V5与VSCode联合配置代码编写与下载环境,解决报错问题

    发表评论