PlatformIO是一款跨平台的物联网开发的生态环境,VS Code 这款强大的文本编辑器辅以 PlatformIO IDE 插件就可以化身为一款强大的MCU开发环境,支持绝大多数流行的单片机平台,比如今天要讨论的 stm32 系列单片机。
环境及工具本文讲解使用的系统平台是 ** cOS 10.14,其它平台比如 linux、windows 步骤和操作基本类似;stm32 开发板是以stm32f103c8t6为核心的最小系统板;stm32 芯片调试器使用的是 stlink v2;platformio IDE 搭建下载对应平台的VS Code,这里下载 ** c 版的,下载完成后安装即可; 打开 vs code ,点击左侧第五个按钮,显示插件管理界面,搜索插件 PlatformIO IDE,并安装此插件;安装过程耐心等待,成功后会有提示!
platformio IDE 简介重新打开安装好插件的 VS Code ,会看到左下角多了一个小房子logo样式的按钮,点击这个按钮就会打开 Platformio 主页:
可以看到主页中最顶端包含了一个导航栏,有用的就是前进后退的按钮和账户相关的交互元素,整个主页其实是Platformio在本地开启了一个web应用(类似于一个简单的小网站),包含了Home、Account、Libraries、Boards、Platforms和Devices六个标签页,下面分别简单说明一下。
Home 标签页进入Platformio 的主页显示的就是 Home 标签页,标签页内从上到下可以依次看到以下内容:
Show at startup 的复选框,勾上后,每次启动 vs code 就会启动这个主页;Quick Access 下有四个操作按钮,分别是:New Project:用于新建工程;Import Arduino Project:用于导入电脑中已经存在的 Arduino 工程;Open Project:用于打开已经存在的 Platformio 工程;Project Examples:用于打开本机已经安装的单片机平台的例程工程; Recent News:显示最新 Platformio 信息;Account 标签页这个标签页用于管理账户信息,首次打开的时候,是用户登录页面,当登录已有的 Platformio 账户后,就会显示用户信息和密码的相关操作,这里就不细讲了!
Libraries 标签页Libraries 标签页是管理库的接口,这里只简单说明一下,后面如果有时间就写一篇文章详细讲解一下库管理。主要包含四个标签页:
Registry 标签页 这个页面是有一个搜索框,搜索框内没有内容的时候,会在搜索框下面显示所有可用的库,搜索框中输入关键词就会过滤显示相关的库。 点击想要安装的库,就会进入这个库的详细页面,这个页面里有安装按钮、例程、使用方法等操作接口。 Installed 标签页 这里主要展示本机已经安装的第三方库。 Built-in 标签页 这里显示已安装平台内置的库。 Updates 标签页 展示需要更新的库。Boards 标签页这个标签页用来展示 Platformio 支持的开发板列表,最上方的搜索框内可以输入关键词过滤显示相关的开发板,比如输入 Arduino 就会显示Arduino的开发板。
列表中每个条目显示一个开发板,包含信息:
Platforms 标签页这个标签页用来管理平台支持,比如我的这里安装了两个单片机平台的支持:
Atmel ** RST STM32这两个条目可以点进去查看平台详细信息和对平台进行一定操作。标签页内还包含所有的嵌入式、桌面平台的相关管理项,同时也有框架展示的标签页,可以通过这里的每个条目了解对应框架的信息和使用方法。
Devices 标签页这里显示连接电脑的硬件设备,比如串口、数字逻辑设备和网络设备。
使用 Platformio IDE这里以创建 ST STM32 平台的 stm32f103c8t6 芯片工程为例,讲解一下工程的基本使用方法。
新建工程打开 Platformio 的主页,点击 New Projects; 在工程新建窗口中,配置如下创建名为 blink 的工程:最后点击 Finish ,等待片刻工程就会创建完成。 这里暂时选择使用框架为 Arduino,stm32还可以选择其它框架,这里先挖个坑,等有时间专门写一下针对stm32其它框架的使用。
工程界面介绍新建工程后,就会打开相应的工程,如下图所示:
文件结构窗口左侧默认显示的是资源管理器,这里可以看到文件结构。
.pioenvs 文件夹:存放编译产生的中间文件和最后生成的执行文件;lib 文件夹:存放库文件;src 文件夹:存放源文件,其内部默认生成名为 ** in.cpp 的源文件;platformio.ini:工程的配置文件工具栏在工程窗口的左下方会看到多出来的一些按钮,这就是工程的工具栏:
依次说明这几个快捷按钮的作用:
主页按钮:前面已经提到过是打开 Platformio 主页的按钮编译按钮:小对号,点击后会编译当前激活的工程烧写按钮:向右的小箭头,触发程序烧写的过程远程烧写按钮:小云朵,触发远程烧写程序的过程清理按钮:小垃圾桶,用于清理编译过程生成的文件按钮:小烧瓶,工程,免费版的Platformio受限不能用;运行任务按钮:小本子,会跳出操作菜单,包含编译、烧写、调试等操作;串口监视器按钮:小插头,点击后会启动命令行的串口监视助手;终端按钮:小命令行,点击后新建一个终端窗口;快捷操作栏点击窗口左侧的做后一个logo也就是小蚂蚁头,就会出现针对工程的快捷操作:
根据字面意思就知道相应快捷操作是什么用途了,这里就不做介绍了。
编写代码src文件夹下为源文件,更改源文件 ** in.cpp 的内容如下:
#include编写代码过程中就会感受到强大的代码提示功能,写代码从此一马平川,各种666!同时也支持代码跳转,比如跳转到函数定义,可以按住 com ** nd 键(linux和window下是 ctrl 键)然后鼠标左键单击就可以跳转,感受空间穿梭的 ** !
编译程序这个操作很简单,点击工具栏中的编译按钮即可触发编译,编译信息会在新的终端窗口中显示,初次编译的时候,会很慢,那是因为 Platformio 根据工程配置下载对应的平台支持文件,包含了配置的框架、编译工具、调试工具等等,因为这是国外的服务,所以可能会很慢,耐心等待即可,编译完成后,会出现如下类似信息:
> Executing task: platformio run < Processing genericSTM32F103C8 (platform: ststm32; board: genericSTM32F103C8; framework: arduino) ... Compiling .pioenvs/genericSTM32F103C8/src/ ** in.cpp.o ... Compiling .pioenvs/genericSTM32F103C8/FrameworkArduino/wirish_time.cpp.o Archiving .pioenvs/genericSTM32F103C8/libFrameworkArduino.a Indexing .pioenvs/genericSTM32F103C8/libFrameworkArduino.a Linking .pioenvs/genericSTM32F103C8/firmware.elf Checking size .pioenvs/genericSTM32F103C8/firmware.elf Building .pioenvs/genericSTM32F103C8/firmware.bin Memory Usage -> DATA: [== ] 15.3% (used 3136 bytes from 20480 bytes) PROGRAM: [== ] 21.6% (used 14188 bytes from 65536 bytes) ============================ [SUCCESS] Took 3.33 seconds ============================ 终端将被任务重用,按任意键关闭。触发编译还可以使用快捷操作栏中的 build操作。
上传程序十里使用的是 stm32f103c8t6 的最小系统板,经调试器 stlink v2 连接电脑,点击工具栏的烧写按钮(或者快捷操作栏的 Upload 操作),即可看到跳出的终端中显示上传过程中打印的信息,这里就不列出来了。
烧写过程中,stlink v2 调试器的指示灯会有所反应,完成后,最小系统板的程序就会运行,就会看到板上的LED闪动了起来,说明烧写成功!
调试程序过去免费版(社区版)PlatformIO 的调试功能受限,不能正常进行程序调试,若想正常使用,需要订阅Plus版,但是现在可以使用 PIO 的调试器了,可以跳过本篇下面的内容了,移步一下文章了解 PIO 的自带调试功能:
十里:PlatformIO IDE(VScode) 下调试 STM32 平台程序过去不能 ** PIO 的调试功能的时候,可以借助 VS code 的插件 Cortex Debug 进行调试,稍作配置就能进行正常的工程调试啦!
openocd 添加至系统环境变量在这里我们使用openocd开启调试服务,若要使用此方式进行调试, Cortex Debug 能自动调用环境变量中能找到的openocd,为了使用方便,需要将openocd添加至系统的环境变量,上面我们知道,Platformio 已经自动安装了编译调试工具。
在用户目录下应该会找到文件夹 .platformio ,会从下面的文件夹中找到 openocd 运行文件(windows下是openocd.exe,目录可能有所不同):
/Users/5km/.platformio/packages/tool-openocd/bin
对于linux或者 ** cOS使用者 若使用的命令行shell是zsh,可以使用以下命令添加环境变量:echo 'export PATH="/Users/5km/.platformio/packages/tool-openocd/bin:$PATH"' > ~/.zshrc 若使用的命令行shell是bash,可以使用以下命令添加环境变量:echo 'export PATH="/Users/5km/.platformio/packages/tool-openocd/bin:$PATH"' > ~/.bashrc windows用户,找到相应目录以后,按照网上的方法,将目录添加到环境变量中就可以了添加完成后,启动一个命令行,执行以下命令,如果打印了版本信息说明添加成功:
$ openocd -v GNU MCU Eclipse ** -bits Open On-Chip Debugger 0.10.0+dev-00392-gbe9ef0b0 (2018-01-12-16:51) Licensed under GNU GPL v2 For bug reports, read 安装 Cortex Debug 插件VS code 插件管理器中搜索 Cortex Debug ,安装即可。
优化编译选项程序调试,需要编译的时候生成符号库,所以需要为工程配置中添加生成符号库的支持,工程配置 platformio.ini 中添加以下内容即可:
build_flags = -g最终配置内容:
[env:genericSTM32F103C8] platform = ststm32 board = genericSTM32F103C8 framework = arduino build_flags = -g重新编译一遍!
添加调试配置 VS Code 菜单栏——调试——添加配置; 选择 {} Cortex Debug: OpenOCD 即可添加配置; 更改配置,参考 Cortex-Debug Launch Configurations 添加和调整 .vscode/launch.json 文件的部分配置如下:{ "version": "0.2.0", "configurations": [ { "type": "cortex-debug", "request": "launch", "servertype": "openocd", "cwd": "${workspaceRoot}", "executable": "${workspaceRoot}/.pioenvs/genericSTM32F103C8/firmware.elf", "name": "Debug (OpenOCD)", "device": "STM32F103C8", "configFiles": [ "inte ** ce/stlink.cfg", "target/stm32f1x.cfg" ], "runToMain": true }, ] }其中,
- executeable 配置为工程中生成的 elf 文件的路径,这个需要自行更改为自己工程的 - device 指定芯片型号,调试器会自行选择 svd 文件,以便正确显示外设寄存器的正确信息 - configFiles 配置两个文件,一个是接口配置,一个是调试目标(芯片)的配置文件 - runToMain 设置为true,启动调试后会运行到 ** in 入口停止进行调试点击 VS Code 窗口左侧的调试按钮,切换至调试界面:
橙色圈内的下拉菜单可以选择调试配置,根据名称(对应上面配置信息中的 name )选择刚刚添加的配置,单击其左边的绿色三角按钮(保证电脑经stlink连接到了最小系统板上),即可启动调试过程:
启动调试后默认停在程序最开始的地方,能够看到窗口最上方出现了一个调试工具栏, 包含了基本的执行操作:
依次是继续执行、单步、单步进入、单步跳出、重新运行和停止操作按钮。
可以打开 ** in.cpp 文件,在代码行号左侧点击可以添加或删除断点。在 pinMode(LED_PIN, OUTPUT); 添加断点,点击继续执行按钮,运行至断点处,然后点击单步进入按钮,此时可以看到窗口:
可以看到窗口左侧部分能够查看变量,包含局部、全局变量;还可以添加变量监视;再下面就是调用堆栈,这里可以看到函数的调用层次。
还可以看到一个 CORTEX PERIPHERALS 的标签,点开后会看到如下图橙色框内的外设寄存器的信息,方便调试程序!
以上看来满足了基本的调试功能了,大功告成!
one more thing其实调试这块儿有一个问题,Platformio比较霸道,当你关闭工程重新打开后,它会自动把 launch.json 中的配置更改为 Platformio 的调试配置,所以每次打开工程后需要自行添加 Cortex Debug 的配置,目前还没想到很好的解决方法,想到后会更新在此。
总结本文讲了 PlatformIO IDE 的安装以及基本的使用,满足了stm32系列单片机的基本开发需求。
博客原文:
stm32开发新方式-platformio的IDE