使用STM32CubeMX + Visual Studio Code + OpenOCD + PlatformIO搭建一个现代化且跨平台的STM32开发环境

xv7Ml9.png

前言

其实这套工具链(除开STM32CubeMX)不仅STM32能用,还能给8051,ESP32,Arduino等芯片使用,只要你所使用的烧录工具以及芯片本身被PlatformIO支持。

在本文介绍的这套工具链中,Visual Studio Code为文本编辑器,gcc-arm-none-eabi为编译器,STM32CubeMX用于创建基础代码,而PlatformIO则将上述内容组合到一起,形成了一个强大的IDE。

为什么要抛弃Keli与MDK

抛弃这些老旧的IDE的理由很多,对于初学者而言,这些IDE通常没有如代码补全之类的现代IDE的基本功能,UI也异常老土;对于大多团队,MDK等老旧IDE通常仅有Windows版本,就大多数情况而言,统一开发平台往往比较困难,甚至有部分团队因为各种各样的原因不得不在Linux平台上进行开发;而对于嵌入式领域从业者而言,该类IDE通常为专有软件,使用其进行嵌入式开发,必须遵守相关的协议,具体内容包括但不限于软件付费,编译器限制代码行数等。

xv7dld.png

其次,STM32CubeMX以及HAL库的出现向老旧的生产方式发起了挑战,使用STM32CubeMX以及HAL库,我们可以很轻松地生成STM32 MCU的初始化代码以及工程,而不需要深入了解ARM架构中海量的寄存器以及芯片内部各种晦涩难懂的电路。

xvHaNT.png

尽管这种不需深入理解硬件便直接“浮沙筑高台”的开发方式以及HAL库本身的代码质量一直饱受诟病,但不得不承认,此乃大势所趋。

xvbXe1.png

但是STM32CubeMX只是一个项目生成工具,HAL也仅仅只是一个代码库,我们还需要一个代码编辑器。

Visual Studio Code是微软牵头的一个半开源软件(其开源项目名为vscodium,Visual Studio Code是微软构建的发行版,两者关系类似于AOSP和Android),该软件基于Electron框架构建,定位为代码编辑器,但得益于其强大的扩展能力以及社区生态(当然还有微软的钱),打满插件的Visual Studio Code可以摇身一变,成为21世纪最好用的IDE。

但其实,对于我们的需求,只需要打一个PlatformIO IDE插件就足够了。

PlatformIO是一个开源项目,其的本体是一个Python脚本,它是一个集成工具,提供了对各种嵌入式平台的一键部署和调试,以及代码补全功能。PlatformIO的开发者为该项目编写了相应的Visual Studio Code插件,以使该套系统能集成在Visual Studio Code上,形成一个强大的嵌入式IDE。

xvqRpD.png

工具链介绍

STM32CubeMX

STM32CubeMX是一种图形工具,通过分步过程可以非常轻松地配置STM32微控制器和微处理器,以及为Arm® Cortex®-M内核或面向Arm® Cortex®-A内核的特定Linux®设备树生成相应的初始化C代码。

这是STM32的东家ST公司开发并推出的一款用于配置STM32工程的图形化软件,基于Java构建,提供了对于初始化代码,GPIO,分频,调试,甚至是实时操作系统的一键部署以及图形化配置功能,极大简化了基于ARM架构的STM32芯片原本复杂的配置过程。

xvqHtf.png

在我们的工具链中,STM32CubeMX主要负责生成基础的,让硬件至少能运行的代码。

Visual Studio Code

VSCode是微软推出的一款半开源的代码编辑器,基于Javascript的Electron框架构建,拥有庞大的社区生态以及无与伦比的可扩展性,通过第三方插件,Visual Studio Code能被轻易配置为多种语言的IDE环境,甚至有部分新兴编程语言直接将VSCode指定为官方开发工具。

xvqjXj.png

在我们的工具链中,VSCode主要作为代码编辑器,以及整套系统的框架。

OpenOCD

OpenOCD(Open On-Chip Debugger),即开源片上调试器,是一个命令行工具,一个诞生于2005年的嵌入式设备调试,编程工具。OpenOCD需要一个仿真器(一个通常使用USB接口的硬件设备,是能够提供调试目标的电信号的小型硬件单元)才能运作,这个仿真器可以是JLink,也可以是STLink,只要开发板兼容相应的协议。

xvL9A0.png

在我们的工具链中,OpenOCD负责与仿真器合作建立其从主机到开发板的连接,在此基础上进行程序烧录和调试。

gcc-arm-none-eabi

gcc-arm-none-eabi是GNU项目的GCC项目的一部分。(此处GCC指GNU‘s Compiler Collection,GNU项目的编译器集),是一个交叉编译器,用于在Windows,Linux等平台上为ARM架构的嵌入式环境编译软件。

在我们的工具链中,gcc-arm-none-eabi作为编译器。

实际上,你不需要自行下载以及配置它,该过程会由PlatformIO自动完成。

PlatformIO IDE插件

PlatformIO IDE插件是Platform项目的组成部分之一,是VSCode的一款插件,提供了嵌入式工程的一键式环境部署以及编译,调试功能。PlaformIO就像是一瓶胶水,将原本零零散散的各个模块粘连形成了一个整体。

在我们的工具链中,PlatformIO插件为VSCode补充了功能,使其变成一个强大的跨平台嵌入式IDE。

STLink(仿真器硬件)

STLink是由ST公司推出的一款在线调试编程器,支持JTAG和SWD协议,以及用于STM8系列MCU的SWIM协议。几乎是国内嵌入式工程师人手一个的必备品。

实际上,你也可以使用其他的仿真器,比如JLink,只要开发板和OpenOCD都兼容其协议。

在我们的工具链中,仿真器负责辅助OpenOCD运作,建立从主机到开发板的通信。

配置流程(Windows)

下载并安装软件

  1. STM32CubeMX

    ST公司的官网提供了该软件的下载页面:STM32CubeMX - STM32Cube初始化代码生成器 - STMicroelectronics

    不过你需要注册一个账号才能下载,建议使用临时邮箱,因为ST会朝你的邮箱里不断地赛广告。

  2. Visual Studio Code

    微软的官网提供了该软件的下载页面:Download Visual Studio Code - Mac, Linux, Windows

  3. Python

    由于PlatformIO IDE插件基于Python构建,你需要安装一个Python以运行PlatformIO。

    Python官网的下载页:Download Python | Python.org

    或者,如果你的C盘足够大,可以在微软商店里搜索并安装Python。

  4. OpenOCD

    OpenOCD在Github上有一个镜像仓库,这是它的Release页:Releases · openocd-org/openocd (github.com)

    此处提供了基于mingw32构建的Windows版本(32位),解压后需配置环境变量(path项)。

为VSCode安装PlatformIO IDE插件

直接在VSCode的插件商店中搜索PlatformIO IDE即可,图标为一个蚂蚁头。

配置流程(Linux)

你都会用Linux了,这些还要我教你?😓

第一个工程

从STM32CubeMX创建工程

STM32CubeMX可以直接选择MCU以创建对应工程,在主页选择ACCESS TO MCU SELECTOR即可,期间需要下载部分索引库以及你所选择的MCU相应的库和配置文件,请注意检查你的网络和磁盘状况。

期间会有这样一个页面让你定义需要用到的GPIO,以及MCU的调试方式,根据项目需要进行设定即可。

图-配置GPIO

配置完GPIO后在Project Manager选项卡中输入项目名称以及储存路径即可,本文配置中使用的Toolchain为STM32CubeIDE,请确保该页中Toolchain / IDE项为STM32CubeIDE。你也可以自行摸索Makefile等构建方式在这套工具链中的使用。

在VSCode中使用PlatformIO IDE插件打开工程

在VSCode中弹出的PIO Home页面里选择New Project以创建一个PlatformIO工程,路径和项目名应与之前在STM32CubeMX中创建的工程一致,以保证PlatformIO工程能够使用STM32CubeMX生成的库和配置文件。

xvLYDA.png

选择与你的开发板对应的MCU即可。

另外,由于一些不可抗力,PlatformIO至今未能在国内搭建资源镜像站,在创建PlatformIO工程的过程中需要从境外服务器下载相应的配置文件,通常该过程会异常缓慢或者根本无法下载,请使用科学上网或手机热点以缓解此类问题。

修改PlatformIO IDE配置

其配置文件名为platformio.ini,你可以在创建的项目的根目录找到该文件。

我们需要修改的主要是其上传,调试工具链以及源代码,头文件的路径

你可以参照下面的文件进行修改,这是我使用搭载STM32F407VET6的开发板与STLink仿真器进行开发的配置文件。

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html

[env:black_f407ve]
platform = ststm32
board = black_f407ve
framework = stm32cube
; 你需要指定debug_tool,然后才能Debug
upload_protocol = stlink
debug_tool = stlink

[platformio]
include_dir=Inc
src_dir=src

配置好上述的upload_protocol,debug_tool,以include_dirsrc_dir后,PlatformIO IDE的一键编译,烧录,调试,还有代码补全,语法提示功能全部正常运行。

编写一个闪烁的LED

平平无奇的嵌入式版hello world

//...
  while (1)
  {
    /* USER CODE END WHILE */
    HAL_GPIO_TogglePin(LED_VCC_GPIO_Port,LED_VCC_Pin);
    HAL_Delay(5000);
    /* USER CODE BEGIN 3 */
  }
//...

烧录和运行程序

PlatformIO IDE插件贴心地为你在VSCode底部创建了几个按钮

xvLPhT.png

点击其中右方向键即可一键编译,烧录,执行。

代码调试

PlatformIO IDE插件已经为你准备好了一切,只需要按下F5就能编译,烧录,开始调试。

xvL0C8.png

PlatformIO IDE插件将堆栈调用等数据全部显示在了VSCode的Debug页里,一切就像在使用Visual Studio那样舒适。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值