stm32 vscode 编译_使用 VSCode 打造 STM32 开发环境

VSCode 应该是目前最流行的开发工具之一了。这篇文章记录了我在 linux 下,使用 VSCode 作为 STM32 开发环境的一些折腾过程。

我使用的是 Ubuntu 18.04,使用其它发行版应该也没有任何问题,或者 windows。需要准备的原料有:VSCode + 官方 C/C++ 插件

gcc-arm-none-eabi

make

STM32CubeMX

jlink + 驱动

前三项可通过 apt-get 等包管理工具安装。如果你是要进行一个新项目的开发,强烈安利使用 STM32CubeMX 进行源代码工程的生成,可以免除自己写 makefile,写无聊的硬件配置代码。如果是从已有的 keil 项目移植,需要自己写好 makefile,并检查好代码中 armcc 和 gcc 的特性兼容性问题(比如 __weak 这样的东西),具体内容不在本篇讲述。

1. 使用 STM32CubeMX 生成一个项目工程

如果已经用过这个玩意了,可以跳过这一步,没用过的可以看一下。STM32CubeMX - STM32Cube initialization code generator - STMicroelectronics​www.st.com

这个工具是 java 开发的,需要在系统中装好 jre。在选择好自己的芯片型号后,建立一个新项目。

配置好所需要的各个管脚和外设的功能,在这里我建立一个简单的点灯程序,需要 PA6 作为 LED 的管脚。注意的是,除了 RCC 这样必须要配置的外设外,调节的接口也要配置好。

如果有需要嵌入式操作系统的需求,可以把 freertos 也配上。

在 Projec->Settings 中,选择 toolchain-ide 项目 makefile,

如果喜欢的话,勾选下面一项,将外设的配置代码分成独立成对的 .c .h 文件

然后,生成工程源码。目录中的结构是这个样子的

Drivers,Inc 文件夹包含了 HAL 库的代码,Middlewares 包含了 freertos 等中间层代码,我们的用户层代码丢在 Src 中。进入这个文件夹,如果你已经安装好了前面的原料,直接执行 make,将建立一个 build 目录,里面包含生成 hex 和 .bin 文件。至于 makefile, gcc-arm-none-eabi 具体如何工作的,不在本篇论述。

2. 使用 VSCode 编写、调试代码

VSCode 和 C/C++ 插件装好,并去下载安装 jlink 的驱动Downloads​www.segger.com

都准备好后,用 VSCode 打开工程文件夹,按 F1 搜索 C/CPP: Edit configurations,配置一写信息帮助 C/C++ 插件更好的做语义 completion 和代码检查工作。可以把 makefile 中的 C_INCLUDES 和 CDEFS 照抄到 "includePath" 和 "defines" 中。"defines" 中添加一条 "__GNUC__"。然后将 arm-none-eabi-gcc 编译器的 standard library 路径也加入。如果你不知到它们在哪儿,运行这条命令

echo | arm-none-eabi-gcc -v -E -x c++ -

然后把 include <...> 下的路径都添加到 "includePath" 中,最后结果类似下图

现在,使用 VSCode 修改一下代码,添加点灯的任务,可以看到补全功能

修改完后 make 编译生成一下固件。

3. 调试

点开调试界面,新建调试配置,在 launch.json 文件中输入以下信息,注意其中可执行文件要替换成你的自己的文件路径

{

// 使用 IntelliSense 了解相关属性。

// 悬停以查看现有属性的描述。

// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387

"version": "0.2.0",

"configurations": [

{

"name": "ARM Debug",

"type": "cppdbg",

"request": "launch",

"program": "${workspaceFolder}/build/led_test.elf",

"miDebuggerPath": "arm-none-eabi-gdb",

"targetArchitecture": "arm",

"cwd": "${workspaceFolder}",

"externalConsole": true,

"MIMode": "gdb",

"setupCommands": [

{

"text": "exec-file '~/stm_proj/led_test/build/led_test.elf'"

},

{

"text": "target remote localhost:2331"

},

{

"text": "monitor reset"

},

{

"text": "monitor halt"

},

{

"text": "load"

}

]

}

]

}

使用 jlink 连接好 PC 和开发板,开启 GDBServer,同样,注意根据你的芯片型号和调试接口选择正确的参数

JLinkGDBServer -device STM32F405RG -if SWD

然后,我们就可以开始调试了!

总结:

VSCode 的代码补全非常舒适,反应速度也比较快,插件很多,喜欢的还可以用 vim 插件,用它写代码的体验远远超过 keil、eclipse 这样的傻大个。

调试实际上就是 VSCode 可以使用 gdb 作为后端调试工具,使用 stlink,openocd 等工具,修改其中对应的配置,开启 gdbserver 就都能调试。不过目前的调试能力好像还不是很完善,比如无法实时查看寄存器,不打断点有点小问题。

如果更懒人一点,可以把编译、烧录、开 gdbserver 等都做成 tasks。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值