VSCode实现STM32开发

VSCode简洁美观、功能强大、插件丰富。多用于桌面开发,或许你不知道vscode还可以用来开发嵌入式。下面就来详细介绍下实现过程

依赖的工具

  1. STM32CUBEMX, ST官方的初始化代码生成工具
  2. Visual Studio Code, 个人认为目前最优秀的跨平台代码编辑器
  3. MingGW, windows版gcc,主要使用其make命令
  4. GNU Arm Embedded Toolchain, 交叉编译工具链
  5. openocd, 烧录工具

安装注意事项

mingw下载安装:

Downloads - Mingw-w64GCC for Windows 64 & 32 bitshttps://www.mingw-w64.org/downloads/#mingw-builds进入后选择“Mingw-builds”,点进去下载就行
 

另一种选择是下载集成mingw的codeblocks,安装包里集成了mingw

Code::Blocks - Code::Blockshttp://www.codeblocks.org/

 GNU Arm Embedded Toolchain的下载安装

 下载链接:

GNU Toolchain | GNU Arm Embedded Toolchain Downloads – Arm Developerhttps://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads现在最新的版本为10.3版:

下载这个安装包安装即可

openocd的下载与配置

下载链接:

Download OpenOCD for Windowshttps://gnutoolchains.com/arm-eabi/openocd/只有压缩包版本,下载完后解压,放入已知目录即可。比如C:\Program Files\

以上软件,安装完成后,需要将其bin目录添加要path环境变量

比如我的:

 检验是否配置正确:

按住shift右击桌面空白处,打开powershell 。 输入以下命令检测安装配置的正确性:

make --version
arm-none-eabi-gcc --version
openocd --version

如果正常,都能得到版本信息:

 如果提示找不到make, 可能原因是名称不对,原来是因为安装完后默认加了mingw32的前缀,进入mingw的bin目录,直接把mingw32-make.exe复制一份,然后重命名为make.exe就OK了

 到此,准备工作算是完成了。

vs code的配置

插件安装 安装c/c++ Extension Pack这个插件就行了

这个扩展包比较全。需要的都包括了。

另外,强烈推荐one dark pro 这个主题插件


 牛刀小试

一 使用stm32cubemx生成初始代码

  1. 时钟和系统配置


    下图中必须选择Serial Wire,否则有奇怪的结果

  2. 外设配置,这里使能串口1, 参数(115200, 8, N , 1)

  3.  项目设置

    Toolchain/IDE这一栏,我们不选任何IDE,只选makefile

  4. 代码生成选项,我习惯只copy需要的库,且成对(.c/.h)生成

  5. 配置完成后,点击右上角的生成按钮,生成工程

二 用vscode开发

用vscode打开项目文件夹
 

首先看看makefile文件
 

 源文件和头文件

随便打开一个.c文件,发现有很多未“定义标识符”错误提示,虽然不影响编译,但是看着不爽

这是因为vscode 不知道去哪里索引。

下面来解决这个问题 按下ctrl+shift+p快捷键,输入 c/c++自动弹出

 

 编辑c/c++这个插件的配置文件, 根据makefile配置includePath, 左边是.json文件,右边是makefile文件:

 是一一对应的,browse 栏下的path 也配置下 编译器路径"compilerPath"要配置正确。保存后再看刚才打开的源文件,错误提示全没了

 打开终端输入make就能编译

成功生成bin和hex文件。

编译时,输出的信息太乱(因为命令很长)?可以设置成静默编译,修改makefile,在命令的前面加入@,同时echo当前编译的文件。(😂对makefile语法不是很懂的可以补一下相关教程)

$(BUILD_DIR)/%.o: %.c Makefile | $(BUILD_DIR)
	@echo "build $<"
	@$(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@

$(BUILD_DIR)/%.o: %.s Makefile | $(BUILD_DIR)
	@echo "build $<"
	@$(AS) -c $(CFLAGS) $< -o $@

$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
	@echo "generate elf file"
	@$(CC) $(OBJECTS) $(LDFLAGS) -o $@
	$(SZ) $@

 再运行make试试:

编译输出简洁多了,完美。

三 用openocd烧写代码

 把printf映射到串口1

修改usart.h文件

/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */

usart.c添加如下代码

/* USER CODE BEGIN 1 */
int _write(int file, char *ptr, int len)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)ptr, len, HAL_MAX_DELAY);
  return len;
}
/* USER CODE END 1 */

main.c:

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    HAL_Delay(1000);
    printf("hello world\n");
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

加在USER CODE BEGIN和USER CODE END之间的代码,cubemx下次生成时不会删除

工程中添加openocd的配置文件,加如下内容

source [find interface/stlink-v2.cfg]
source [find target/stm32f1x.cfg]

修改makefile:

#######################################
# clean up
#######################################
clean:
	del /q $(BUILD_DIR)

#######################################
# flash
#######################################
load: all
	openocd -f ./openocd.cfg -c init -c halt -c "program $(BUILD_DIR)/$(TARGET).hex verify reset exit"
reset:
	openocd -f ./openocd.cfg -c init -c halt -c reset -c shutdown
erase:
	openocd -f ./openocd.cfg -c init -c halt -c "flash erase_sector 0 0 last" -c shutdown

 注意,命令中的 ./openocd.cfg和上一步中的文件名保持一致。

正常情况,终端输入make load就能烧写了

烧写成功。连上串口助手看到打印结果正确,一秒一次,正确输出"hello world", 说明printf重定向也是对的,Great!

  • 12
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: VSCodeSTM32CubeMX是两个不同的工具,可以结合使用来进行STM32开发VSCode是一款轻量级的代码编辑器,支持多种编程语言和插件扩展,可以通过安装插件来实现STM32开发的支持。例如,安装C/C++插件和ARM插件可以实现STM32的编译、调试和烧录等功能。 STM32CubeMX是一款图形化的STM32配置工具,可以帮助开发者快速生成STM32项目的代码框架和初始化代码。可以通过生成的代码框架和初始化代码来快速开发STM32应用程序。 在使用VSCodeSTM32CubeMX进行STM32开发时,可以先使用STM32CubeMX生成项目代码框架和初始化代码,然后在VSCode中进行代码编写、编译、调试和烧录等操作。通过结合使用这两个工具,可以提高STM32开发的效率和质量。 ### 回答2: VSCodeSTM32CubeMX均是非常实用的开发工具,都有着自己的优点和适用场景。 首先,VSCode作为一款轻量级、高效率的文本编辑器,具有开源、跨平台的优点,适用于各种程序开发的需求,特别是针对C++语言的开发有非常出色的支持,拥有各种功能丰富的插件以及可自定义的配置,使得程序开发更加便捷。 而STM32CubeMX是一款用于STM32系列芯片开发的可视化工具,其可以非常方便地进行代码生成、硬件配置等操作,快速搭建起STM32芯片的开发环境。同时,STM32CubeMX还具有各种功能模块(如对PWM、ADC等的支持),方便用户开发新的项目。 那么,VSCodeSTM32CubeMX结合起来,就可以带来更加高效、便捷的开发体验了。 一方面,VSCode支持各种编程语言的开发,并且作为一个优秀的编辑器,体验也更加流畅。用户可以用VSCode进行STM32CubeMX生成的代码的开发、编译等工作,并同时可以使用丰富的VSCode插件(如Git、IntelliSense等)帮助自己更加高效地开发项目。 另一方面,STM32CubeMX则可以帮助用户极大地降低STM32开发的门槛。通过鼠标点选,硬件配置、代码生成过程可以被轻松地完成,还可以轻松添加和删除硬件功能模块进入项目。在整个开发流程中,STM32CubeMX可以帮助用户大大减少了编码的时间以及代码调试的难度,从而使得整个开发流程更加高效。 总的来说,VSCodeSTM32CubeMX在STM32程序开发中都有着各自独特的优势和作用,搭配使用更是能够带来事半功倍的效果。 ### 回答3: 在进行STM32开发时,选择合适的开发工具和方式是非常重要的。VSCodeSTM32CubeMX都是非常受欢迎的开发工具,但是它们各自有着不同的优势和特点。 VSCode是一款由微软开发的轻量级开源编辑器,它可以支持多种编程语言,包括C/C++。VSCode的优势在于其丰富的插件生态系统和高度的可扩展性。VSCode可以通过安装不同的插件来提升其对不同开发环境的支持,例如C++插件可以提供代码补全、文本高亮、调试工具等功能。同时,VSCode也可以通过自定义设置来满足不同开发者的需求。因此,VSCode是非常适合那些喜欢自定义配置和寻求高度可扩展性的开发者。 STM32CubeMX是一个工具,可帮助快速配置嵌入式应用程序的外设和代码框架。它提供了一种图形化的用户界面,允许用户轻松选择和配置不同的外设。这极大地简化了嵌入式系统开发的流程,使开发者可以更专注于软件开发。使用STM32CubeMX还可以自动生成C代码,包括启动文件、中断处理程序、外设驱动程序等。这些代码框架可以帮助开发者快速启动项目,并提高代码的质量和可读性。 综上所述,VSCodeSTM32CubeMX都有其优点,开发者需要根据具体开发需求和个人偏好来选择适合自己的工具。如果需要高度可扩展性和自定义设置,可以选择VSCode;如果需要快速配置外设并自动生成C代码,可以选择STM32CubeMX。同时,它们也可以结合使用,以实现更高效的开发

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值