自学内容网 自学内容网

基于VsCode platformio的stm32开发环境搭建


背景

VsCode作为当下流行的编辑器,且不单单是一个编辑器里面集成了很多插件,使用这些插件可以完成很多功能。
STM32开发环境除了KEIL与IAR,其实还有很多其他的开方方式,ST官方提供了很多的开发软件,基于Eclipse也可以搭建一套,使用VsCode配合其他编译链接工具也可以实现操作,当然还有很多种方式进行开发。
使用VsCode的Platformio的插件,可以直接配置所需的一些底层的编译链接工具,使用的也是arm-gcc,用户可以省去一些操作,同时减少开发可能会遇到一些问题。
同时VsCode配合Platformio也是免费开源的的一套工具,对使用者来说也是一种福音。

开发环境搭建

安装VsCode

在官网下载即可

在VsCode的Extensions搜索添安装PlatformIO IDE即可,PlatformIO依赖于python,需要先安装,同时将python加到环境变量之中。

安装 Python 解释器

PlatformIO Core (CLI) 是用 Python 编写的,它 默认安装在除 Windows 之外的所有常用操作系统上。

请导航到官方网站并下载最新的 Python 并安装它。请阅读下面的注释

对于Linux的:

大多数 linux 发行版已经包含 Python 安装。您可能需要确保已安装 Python 虚拟环境。

Debian/Ubuntu 衍生产品在 Apt 中将此软件包作为 .python-venv

sudo apt install python3-venv

应该就足够了。

(其实导入工程文件夹的时候,工程自动会引导安装PlatformIO的相关依赖,提示点击安装,跳转网页复制sudo apt install python3.8-venv指令就好到终端回车,即可自动安装)

必要时换源,服务器根据服务器到你的位置而定

这里用阿里云,滑动找到清华云“http://mirrors.tuna.tsinghua.edu.cn/ubuntu”的服务器 

macOS 的:

请阅读安装过程中显示的“重要信息”以获取信息 关于 SSL/TLS 证书验证和运行 Install Certificates.command”。

如果您不安装 SSL/TLS 证书,PlatformIO 将无法下载 依赖的包、库和工具链。

Windows系统:

请选择(见下文),否则,命令将 不可用。Add Python to Pathpython

25c67d330e99404ab61c822640313e76.png

在下载python完成之后安装时候,选择Install Now,一定要勾选Add_Python to PATH,防止手工添加环境变量,正常情况下会有以下两个环境变量:

fab852d42b4146e9854146c547f2604c.png

安装好python后需要验证一下安装是否正常,安装完成后在终端中使用命令行

快捷键 Windows+R  输入 poworshell进入指令页面

912b82bd5e1c4429926eb460b467709d.png

先后输入两个指令

python --version
pip --version

会得到如下信息证明Python安装成功

57dcb48a78ec4885b9645e3d2e27355a.png

这一步就折腾了我一整天,起初是用的清华pip源,结果一直报错,排查了全部流程,然后发现换了个阿里pip源之后一切问题都解决了

在C:\Users\(这个文件夹名是用户名)\pip的目录下,用文本工具新建pip.ini

例如:我是在C:\Users\Administrator\pip目录下,新建了pip.ini

73b10da1f37c49a48aa9612816b0f13a.png
如果用户名目录无效,改到appdata目录

7f09df1d203b40cea88c894417e86c1d.png

在pip.ini内填入

[global]
# 超时时间,可自行调整
timeout = 6000
# 源地址
index-url = http://mirrors.aliyun.com/pypi/simple/
# 添加源主机为可信主机,要不然可能报错
trusted-host = mirrors.aliyun.com

国内常用pip源如下:

(1)阿里云 http://mirrors.aliyun.com/pypi/simple/
(2)豆瓣http://pypi.douban.com/simple/
(3)清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
(4)中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/
(5)华中科技大学http://pypi.hustunique.com/

查看配置是否成功

pip config list

这一步也很关键,更新pip为最新版 

pip install --upgrade pip

如果报错,则按照提示 

pip install --user --upgrade pip

安装Platformio插件

 VSCode配置
打开vscode按照下图安装platformio

83a9982efd2d4164b2d0044a86c68b3d.png
安装后可以看到下面会有个进度条开始安装不同的插件,忽然到某一个瞬间,进度条就会停在下图的位置不动,这是可以打开控制台来查看报错信息。来确定问题。

c4b2d02351c243fdb26330d895a11661.png

在菜单点击”help“->"Toggle Developper Tools"菜单,选择”console“标签。

4435b1a62c084523b8cd12e60c4f3577.png
这是你会发现这个部分显示了很多信息,有错误有警告,不要担心,我们一点点看。这个其实是个自动安装的过程

0a75e259040c4c25a7de7329e8704967.png
如果这个过程太漫长而且没有任何变化,好像又没有报错,你可以打开下面的这个文件夹。你可以看到这里慢慢的在增加文件数量。看到下面这样了 基本就是安装ok的

8fdd4794cd6943fbb3de68d98cb71664.png

最终,在磨砺的驱使下,安装成功

75e9eb4968c14e4fa021c876a5833d0d.png

安装成功后,vscode会提示你重启~ 重启后就会像下面这样有一个小蚂蚁。

0d35bcc6580049f99e22efd5a2f61b83.png

新建工程

8864a7611b924c5c14d86ab7ddc0d391.png


 

0260ffdc1c9fe3d4144745216fb4527a.png


可以选择自己所需的路径,不采用默认的文件存放位置,使用HAL库选择STM32CUBE库即可。

默认文件分布

系统自动生成工程之后,会有一个默认的文件分布,而编译时,只会编译src中的源文件。可以选择将需要编译的文件都移入src之中。
不过这种方式不是很灵活,因此将采用在platformio.ini的配置之中添加所需的编译目录与文件。

编译

新建工程的时候选择了stm32cube这个库,因此我们的工程里面可以不添加hal库的官方代码。
只需添加stm32cube为用户生成的代码,与其他用户自行添加的代码进入编译即可,在链接的时候platformio会自动进行链接。
可以在platformio.ini文件中添加include路径与src的文件
build_flags, include的路径是工程目录,而src_filter的默认路径是src文件夹,此处没有找到合理的依赖

[env:genericSTM32F103C8]
platform = ststm32
board = genericSTM32F103C8
framework = stm32cube
build_flags = 
        -I src/Core/Inc
        -I src/USB_DEVICE/Target
        -I src/USB_DEVICE/App
        -I src/Bsp
src_filter =
        +<Core/src>
        +<USB_DEVICE/Target>
        +<USB_DEVICE/App>
        +<Bsp>

添加路径之后,直接点击左下角的勾进行build,或者在platformio界面点击Build进行编译
 

0ac17075b26e6226301ab593c0f6bc94.png


这样显示就可以表示编译成功,不过编译成功并不代表程序可以正常运行,有时因为路径上少了一部分代码,也可以编译成功,不过不能正常工作。

生成hex文件

编译成功后会默认会成bin文件,不会生成hex文件,需要手动添加python脚本来生成hex文件
脚本如下,保存为文件名extra_script.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 = extra_script.py

在编译完成之后会自动调用这个转换脚本,生成hex输出文件

在线调试

在platformio.ini中添加相似的调试器即参数即可,如stlink,然后在debug界面下,开始即可。第一次调试可能需要下载相关的驱动及文件时间会长一些。

debug_tool = stlink

374666cf3e7bc7103da84dc24dc5821f.png

调试小插曲

相同的线路板在调试的时候,使用jlink能用,而使用stlink的时候不能使用
错误提示UNEXPECTED idcode : 0x2ba01477
原因在于应该买到假货stm32
upload的时候可以添加如下参数来达到烧录程序的功能,不过debug还是不行

upload_flags = -c set CPUTAPID 0x2ba01477

需要修改配置文件C:\Users\test.platformio\packages\tool-openocd\scripts\target\stm32f1x.cfg

swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
========>
swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID -expected-id 0x2ba01477

或者

set _CPUTAPID 0x1ba01477
=======>
set _CPUTAPID 0x2ba01477 || set _CPUTAPID 0

设置0的时候就不会判断expected id,用于兼容不同的芯片,继续进行调试

总结

platformio基本在开发stm32的时够用,且是开源免费的,对开发者来说是一个不错的选择。


原文地址:https://blog.csdn.net/sinat_37300324/article/details/143450335

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!