前言
Windows系统下,目前STM32主流的开发环境还是MDK(Keil),但MDK有着不可忽视的缺点:
- 界面古老,配置界面效果繁琐,很难真正实现一个低亮度视觉友好的界面。
- 自动补全,Keil的自动补全功能只能说是比没有强。
- 功能臃肿,有很多普通开发者或DIY用户用不到的功能。
- 版权风险,虽然现在推出了社区版可以省去破解的步骤,但如果不小心用作商业用途还是会存在侵权的风险。
因此,企业与一般开发者可以选择 VS Code + PlatformIO + STM32CubeMX 来搭建开发环境,优点如下:
- 界面优秀,作为“宇宙最强IDE”的VS Code在用户体验上是一流的。
- 自动补全,功能较为完善。
- 完全免费,无需担心版权问题。
前期准备
- VS Code:主要用于编辑代码
- C/C++ 插件:对C/C++开发的支持(关键字高亮等)
- Cortex-Debug 插件:用于后期进行调试
- PlatformIO IDE 插件:用于管理工程
- STM32CubeMX 6.5.0:生成STM32代码
软件安装
这里重点讲一下 PlatformIO IDE 这个插件的安装方法
- 因为一些众所周知的原因,安装时会很缓慢,需要耐心等待
- 在应用商店搜索到插件后,点击安装。
- PlatformIO 安装需要依赖 Python,如果电脑已存在 Python 但报错的话,则需要移除并安装最新版本的 Python 并加入到环境变量中。
- 过程会相当漫长,且没有进度提示,本人测试时安装用了1小时左右。
- 安装好后就是上图所示状态,点击左下角“小房子”图标就会进入主界面。
建立工程
PlatformIO 建立工程
方法一 (不推荐)
- 主界面点击"New Project" 新建工程
- 输入工程名(Project name)、 板子信息(Board)和 软件框架(Framework),并选择工程位置。
- 板子信息根据芯片选择即可,除了芯片信息其他后续使用不到。
- 软件框架Framework任意选择即可,因为要使用STM32CubeMX生成代码,所以不使用内置的软件框架。
- 创建工程时会在选择的位置创建一个以工程名命名的文件夹存放工程文件。选择位置时要注意。
- 配置好项目信息后,点击Finish生成工程,第一次创建工程的过程极其漫长,因为要下载很多源文件。之后再使用这个方法会快很多。
- 这种方法虽然为官方推荐的方法,但过程较为繁琐,实际应用中一般推荐方法二。
方法二 (推荐)
- 因为 PlatformIO IDE是按照配置文件
platformio.ini
来管理工程的,因此可以直接创建一个platformio.ini
填入内容(或复制已有工程的配置文件),;
表示注释。
[platformio]
src_dir = ./ ; 项目源文件为根目录下所有源文件
[env:genericSTM32G031K8] ; 项目的环境名,自定义即可
platform = ststm32 ; 硬件平台为stm32
board = nucleo_g031k8 ; 选择一款对应芯片的开发板即可
upload_port = stlink ; 下载工具为stlink
- 使用 VS Code 打开文件夹即可被 PlatformIO IDE 识别,并自动生成配置文件。
STM32CubeMX 生成代码
根据需要配置外设及时钟
- 使用板载 LED 与 LPUART1 测试。
- 配置时钟为最高的64MHz。
配置工程目录
- 填入工程名,注意这里的工程名就是刚刚创建 PlatformIO 的文件夹名,位置要对应,IDE要选择
Makefile
。
- 在
Code Generator
中选择Copy only the necessary library files
这个选项,对新手来说很重要。
注意
新手建议勾选仅复制工程需要的源文件,因为 PlatformIO IDE 工程源文件是以文件夹过滤的形式来确定的,如果勾选"所有源文件",那么STM32CubeMX 会将包括某些应用模板在内的全部源文件都加入到工程中,在编译的时候会报错,除非生成代码后再手动一一删除。
生成代码
- 生成代码后工程文件夹文件如下图所示。
修改 PlatformIO 配置文件
- 这一步就是根据 STM32CubeMX 生成的代码为 PlatformIO 配置编译所需要的文件。
- 使用
build_flags
将生成的驱动文件包含到编译条件中,-D
表示宏定义,-I
表示头文件路径。 - 使用
src_filter
过滤需要的源文件,+<path>
表示增加某个路径,-<path>
表示排除某个路径。 - 使用
board_build.ldscript
指定编译时的链接文件。
- 使用
[platformio]
src_dir = ./
[env:genericSTM32G031K8]
platform = ststm32
board = nucleo_g031k8
upload_port = stlink
build_flags =
-DSTM32G031xx
-DUSE_HAL_DRIVER
-ICore/Inc
-IDrivers/CMSIS/Include
-IDrivers/CMSIS/Device/ST/STM32G0xx/Include
-IDrivers/STM32G0xx_HAL_Driver/Inc
-IDrivers/STM32G0xx_HAL_Driver/Inc/Legacy
src_filter = +<Core/Src/> +<./startup_stm32g031xx.s> +<Drivers/STM32G0xx_HAL_Driver/>
board_build.ldscript = ./STM32G031K8Tx_FLASH.ld
软件开发
编译&下载程序
- 在
main.c
的编写测试代码,点击左下角的Build
按键即可编译,第一次编译软件会自动下载所需的工具(openocd等)。
- 编译完成后点击
Upload
即可下载程序,会自动复位。这时即可看到LED在闪烁。
调试
- 点击左侧的调试按钮即可进入调试界面,点击
PIO Debug
开始调试。
- 调试开始后PlatformIO会先编译,后进入调试界面,使用上方出现的小框框可以实现开始、停止、单步等操作。左侧可以查看寄存器状态。
- 选中变量可以右键添加到监视窗口
要点总结
- 创建工程时可以直接复制已有工程的
platformio.ini
和STM32CubeMX_ProjName.ioc
到新工程文件夹。注意:STM32CubeMX_ProjName.ioc
文件名称必须改为与所在文件夹名称一致的名称。这样才会在当前目录下生成代码。