小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
使用Arduino开发STM32之环境搭建
-
大家好,我是爱吃猪脚饭的小鱼,今天我们开一个新的小坑,就是用Arduino开发STM32并教你如何使用HAL库在Arduino工程中。之所以要开这个坑的原因是小鱼发现,很多初学者往往很迷恋某一个特定的开发平台,最为突出的就是STM32,记得在小鱼大学那会,开发STM32主要分库函数和寄存器两个流派,最奇怪的是用寄存器的会鄙视库函数,毕竟寄存器人很难看得懂,看不懂的就比较高级-)。小鱼认为,大道至简,把产品设计的简单好用更难但也更能赢得客户,再说现在的AI发展如此迅速,甚至出现了给出模块自动绘制原理图PCB的工具,看样子我迟早会被干掉的(苦瓜脸)。
所以相比使用IDF开发ESP32和用寄存器库函数或直接HAL开发STM32,小鱼个人比较推崇Arduino,原因在于,使用HAL多行代码才能完成的事情,Arduino一行就可以(当然你会说用cubemx直接配置生成,一行代码都不用,但Arduino平台的生态真的很强,太多库拿来即用了)。
Arduino 平台的的STM32其实就是封装的HAL库,所以如果你觉得某个Arduino库不好用,你可以自己写,或者直接把原来的HAL库移植过来。
所以在这个教程中,你将看到使用Arduino和HAL混血的写法,比如这样:
还有这样
以及使用C++创建一个类。
最后如果有时间,再开个cubemx+PIO的开发流程。话不多说,先来创建工程,系统用windows和linux都行,不过小鱼还是喜欢用linux,习惯了主要是。
最好用ubuntu22.04,因为一键安装支持
所以,第一步就是运行一键安装:
https://fishros.org.cn/forum/topic/20
先安装VSCode,接着打开vscode,搜索 platformio 安装
开发 Ardunio 我们可以采用 PlatformIO IDE 进行开发,该 IDE 支持多种类型的单片机,可以在 VSCode 中直接通过插件进行安装。PlatformIO IDE 主要使用 Python 编写,为了能够跨多个版本使用,PlatformIO IDE 在 Python 虚拟环境运行,所以我们需要先安装虚拟环境工具,命令如下:
sudo apt install python3-venv
安装完成后打开 VS Code 的扩展商店,如下图所示,搜索安装 PlatformIO IDE安装完成后在 VS Code 的侧边就可以看到 PlatformIO IDE 的按钮,点击按钮就会执行 PlatformIO IDE 的首次初始化程序。如果初始化过慢可以手动进行初始化安装,命令如下:
source ~/.platformio/penv/bin/activate # 激活虚拟环境
pip install platformio # 安装 platformio 核心
pio pkg install --global --tool "platformio/contrib-piohome"运行完成后,基本就可以装好了,然后在PIO里新建工程
新建工程
接着输入
第二个可以选你的板子,小鱼这里买的是stm32103c6t6的最小系统板子,不到10元。
点Fishish 即可,整个过程会很慢,你可以关闭这个页面,然后用vscode打开文件夹的方式,打开刚刚新建的工程,然后再次点击PIO按钮,这个时候右下角就会出现load相关的进度,直接点取消。
重点来了。
点左下角这里
然后在打开的新的终端里输入
pio run
好,接着等待,这时候就可以看到整个的进度条了,如果网络不好,一键安装里有某个上网工具,咳咳
pio run 结束后应该会报错,因为没有main.cpp,我们来新建一个
在 src/目录下新建 main.cpp ,然后编写如下内容(闪个灯,开发过FishBot的小伙伴会发现这个代码和ESP32上的一模一样,没错!):
#include <Arduino.h> void setup(void) { pinMode(PC13, OUTPUT); } void loop(void) { digitalWrite(PC13, HIGH); delay(500); digitalWrite(PC13, LOW); delay(500); }
接着在运行pio run 的终端再输入
platformio run --target upload
来下载一些上传工具并上传,比如stlink的驱动~
接着你就可以把你的stlink和单片机连在一起,也可以直接使用串口下,直接用usb下也可以。
我们需要改一下下载模式:
PIO可以使用下面这么多种类:
AVAILABLE: blackmagic, cmsis-dap, dfu, jlink, serial, stlink
CURRENT: upload_protocol = serial默认是串口,需要改一下,修改
platformio.ini 文件如下:
[env:genericSTM32F103C6] platform = ststm32 board = genericSTM32F103C6 framework = arduino upload_protocol=stlink
对了,PIO还支持一个工程给很多个板子用,什么意思呢,比如我还有一块STM32F103C8T6
可以添加两个配置
[env:genericSTM32F103C6] platform = ststm32 board = genericSTM32F103C6 framework = arduino upload_protocol=stlink [env:genericSTM32F103C8] platform = ststm32 board = genericSTM32F103C8 framework = arduino upload_protocol=stlink
在VSCode右下角可以切换板子,非常的丝滑。
配置好,直接用快捷键:Ctrl+Shift+U 或者点击左下角的 -> 进行上传即可,板子小鱼并没有带回来,今天就没有办法给大家进行演示了,改天补上。
今天是干货满满的一篇文章,记得点赞再看~