VSCode + PlatformIO嵌入式芯片开发环境搭建指南
VSCode + PlatformIO嵌入式芯片开发环境搭建指南
PlatformIO是一个基于VSCode的嵌入式开发解决方案,相比传统的Keil MDK,它提供了更现代化的开发体验。本文将详细介绍如何使用PlatformIO进行嵌入式芯片开发,包括项目创建、代码编译、程序烧写、调试和串口通讯等关键步骤。
背景
谈到嵌入式开发,STM32无疑是最常见的选择之一。虽然Keil MDK作为主流的STM32开发工具,以其稳定性和高使用率著称,但其老旧的界面和编码方式已经难以满足现代开发需求。PlatformIO作为VSCode的一个插件,为嵌入式开发提供了一个更优雅的解决方案。
安装
1. VSCode安装
VSCode以其快速的启动速度和丰富的插件生态,已经成为许多开发者的首选编辑器。在嵌入式开发中,可以安装C/C++插件以实现代码提示和补全等功能。
2. PlatformIO安装
与Keil不同,PlatformIO不需要安装独立的软件,只需在VSCode插件市场中搜索并安装即可。
3. 驱动安装
根据所使用的嵌入式芯片,可能需要安装相应的驱动程序。以STM32为例,通常需要安装CH340作为串口驱动。
实现
1. 新建项目
安装并启用PlatformIO后,在VSCode侧边栏可以看到一个小蚂蚁图标,点击即可进入控制界面。通过Quick Access中的New Project选项可以创建新项目,并在Board中选择对应的芯片型号及开发框架。
新建项目成功后的目录结构如下:
目录名 | 含义/作用 | 备注 |
---|---|---|
.pio | 项目编译过程文件和编译文件存放位置 | 编译成功后的二进制文件在build文件夹中 |
include | 头文件存放位置 | 只有头文件有效,需要在项目配置文件中添加路径 |
lib | Library文件夹,存放独立的头文件和源文件 | 每个库可以作为一个单独的文件夹放在lib目录下 |
src | 源文件存放位置 | 只有源文件有效,main.c就放在src文件夹里 |
test | 测试文件存放位置 |
2. 迁移项目并编译
以STM32项目为例,需要将项目所需的文件按照PlatformIO的目录格式进行分类:
- 头文件
- 源文件
- 单独的库
将对应文件放置在正确目录后,在platformio.ini
文件中配置头文件路径和其他必要设置。如果遇到重复定义的错误,可以删除重复的文件或整个库。
编译成功后,可以在.pio/build/<你的嵌入式芯片型号>/
目录下找到firmware
文件。
3. 程序烧写
3.1 生成hex文件
在项目根目录下创建export_hex.py
脚本,内容如下:
Import("env")
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"$OBJCOPY", "-O", "ihex", "-R", ".eeprom",
'"$BUILD_DIR/${PROGNAME}.elf"', '"$BUILD_DIR/${PROGNAME}.hex"'
]), "Building $BUILD_DIR/${PROGNAME}.hex")
)
然后在platformio.ini
中添加extra_scripts = export_hex.py
,这样每次编译后都会生成hex文件。
3.2 PlatformIO程序烧写
在platformio.ini
中配置烧写方式为串口(upload_protocol = serial
),然后点击Upload按钮即可自动完成烧写。
4. 程序调试
PlatformIO支持多种仿真器,以STLink为例,需要在platformio.ini
中配置debug_tool = stlink
。连接好硬件后,可以在VSCode的调试侧边栏中选择PIO Debug进行调试。
5. 串口通讯
在platformio.ini
中配置串口通讯参数,然后点击Monitor按钮即可启动串口通讯。
6. 其他小技巧
PlatformIO支持创建虚拟环境以支持不同的开发板。例如,可以为不同的开发板创建不同的环境配置,如下所示:
[env]
platform = ststm32
board = genericSTM32F103ZE
framework = cmsis
build_flags =
-I include/STM32F10x_StdPeriph_Driver/inc
-I include
-D USE_STDPERIPH_DRIVER
-D STM32F10X_MD
monitor_speed = 115200
monitor_echo = yes
monitor_rts = 0
monitor_dtr = 0
extra_scripts = export_hex.py
[env:car]
upload_protocol = stlink
debug_tool = stlink
[env:board]
upload_protocol = serial
这样可以在一个项目中同时支持多个开发板的开发和调试。
总结
PlatformIO为嵌入式开发提供了一个现代化的解决方案,相比传统的Keil MDK,它更加灵活和便捷。虽然目前在资料丰富性和稳定性方面可能还不及Keil,但作为新一代的开发工具,PlatformIO展现了巨大的潜力和发展空间。