联系方式

    深圳市英瑞尔芯科技有限公司

    电话:

    186 6591 0262

    E-mail:

    sally@szinter.com.cn

    地址:

    深圳市福田区振华路现代之窗A座7B

stm32开发新方式-PlatformIO 的 IDE

发布时间:2023-07-11 23:09:00

来源:http://www.szinter.com.cn/news954817.html

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 #define LED_PIN PB0 // 十里使用的最小系统板板上LED连接的是PB0 void setup() { pinMode(LED_PIN, OUTPUT); } void loop() { digitalWrite(LED_PIN, HIGH); delay(1000); digitalWrite(LED_PIN, LOW); delay(1000); }

编写代码过程中就会感受到强大的代码提示功能,写代码从此一马平川,各种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

相关标签: