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

  • 最近重新捡起了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字段添加预处理宏即可在这里插入图片描述

  • 17
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,要在VSCode中安装STM32CubeMX插件。在VSCode的“Extensions”菜单中搜索安装即可。安装完成后,按下F1键,打开命令面板,输入“STM32”,选择“Initialize STM32 project”,输入项目的名称、路径、芯片型号等信息,插件会自动生成项目文件结构和代码模板。 然后,我们需要安装C/C++插件和ARM GCC插件。在VSCode的“Extensions”菜单中搜索安装即可。安装完成后,在项目文件夹内新建一个名为“.vscode”的文件夹,在该文件夹内新建一个名为“c_cpp_properties.json”的文件,并输入以下内容: ```{ "configurations": [ { "name": "STM32", "includePath": [ "${workspaceFolder}/**", "${env:ARM_GCC}/arm-none-eabi/include", "${env:ARM_GCC}/lib/gcc/arm-none-eabi/9.2.1/include" ], "defines": [ "USE_HAL_DRIVER", "STM32F407xx" ], "compilerPath": "${env:ARM_GCC}/bin/arm-none-eabi-gcc.exe", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "gcc-arm" } ], "version": 4 }``` 其中,${env:ARM_GCC}是你安装的ARM GCC工具链的路径。如果你没有安装ARM GCC工具链,可以在ST官网下载并安装。在这里,我选择了ARM GCC 9.2.1版本。修改defines中的芯片型号为你自己使用的芯片型号。 最后,在VSCode的“File”菜单中选择“Open Folder”,打开项目文件夹,选择“New File”创建一个名为“Makefile”的文件,并输入以下内容: ``` TARGET = main MCU_FAMILY = STM32F4xx MCU_MODEL = STM32F407VGTx BUILD_DIR = build SRC_DIR = src INC_DIR = inc CC=arm-none-eabi-gcc LD=arm-none-eabi-gcc OBJCOPY=arm-none-eabi-objcopy CFLAGS = -g -Wall -Werror -std=c11 -D$(MCU_MODEL) -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffreestanding -nostdlib -nostartfiles -nodefaultlibs -fno-builtin -I $(INC_DIR) LDSCRIPT = $(MCU_MODEL).ld LDFLAGS = --specs=nano.specs -T $(LDSCRIPT) -Wl,-Map=$(BUILD_DIR)/$(TARGET).map -Wl,--gc-sections -Wl,--print-memory-usage CSOURCES = $(wildcard $(SRC_DIR)/*.c) OBJS = $(addprefix $(BUILD_DIR)/,$(notdir $(CSOURCES:.c=.o))) all : $(BUILD_DIR)/$(TARGET).bin $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c $(CC) $(CFLAGS) -c -o $@ $< $(BUILD_DIR)/$(TARGET).elf: $(OBJS) $(LD) $(LDFLAGS) $^ -o $@ $(BUILD_DIR)/$(TARGET).bin: $(BUILD_DIR)/$(TARGET).elf $(OBJCOPY) -O binary $< $@ clean: rm -rf $(BUILD_DIR)/* .PHONY: clean ``` 其中,TARGET为生成的二进制文件名;MCU_FAMILY为芯片家族类型;MCU_MODEL为芯片型号;BUILD_DIR为生成的二进制文件路径;SRC_DIR为源代码路径;INC_DIR为头文件路径。修改以上的变量为你的实际应用。 到这里,我们的环境就设置好了。之后,我们就可以在src文件夹下进行源代码编写,命令行中使用“make”编译生成二进制文件,并用ST-Link工具下载到芯片中运行了!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值