大家好,我是爱吃猪脚饭的小鱼,今天我们开一个新的小坑,就是用Arduino开发STM32并教你如何使用HAL库在Arduino工程中。之所以要开这个坑的原因是小鱼发现,很多初学者往往很迷恋某一个特定的开发平台,最为突出的就是STM32,记得在小鱼大学那会,开发STM32主要分库函数和寄存器两个流派,最奇怪的是用寄存器的会鄙视库函数,毕竟寄存器人很难看得懂,看不懂的就比较高级-)。小鱼认为,大道至简,把产品设计的简单好用更难但也更能赢得客户,再说现在的AI发展如此迅速,甚至出现了给出模块自动绘制原理图PCB的工具,看样子我迟早会被干掉的(苦瓜脸)。
所以相比使用IDF开发ESP32和用寄存器库函数或直接HAL开发STM32,小鱼个人比较推崇Arduino,原因在于,使用原生平台多行代码才能完成的事情,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 或者点击左下角的 ->; 进行上传即可,板子小鱼并没有带回来,今天就没有办法给大家进行演示了,改天补上。
今天是干货满满的一篇文章,记得点赞再看~
通信工程专业毕业,7年开发经验
精通c/c++
精通golang
熟悉常见的脚本,js,lua,python,php
熟悉电路基础,嵌入式,单片机
服务端开发
嵌入式开发
>gin接口代码CURD生成工具
sql ddl to struct and markdown,将sql表自动化生成代码内对应的结构体和markdown表格格式,节省宝贵的时间。
qt .ui文件转css文件
duilib xml 自动生成绑定控件代码
协议调试器
基于lua虚拟机的的协议调试器软件 支持的协议有:
串口
tcp客户端/服务端
udp 组播/udp节点
tcp websocket 客户端/服务端
软件界面
使用例子: 通过脚本来获得接收到的数据并写入文件和展示在界面上
下载地址和源码
webrtc easy demo
webrtc c++ native 库 demo 实现功能:
基于QT
webrtc摄像头/桌面捕获功能
opengl渲染/多播放窗格管理
janus meeting room
下载地址和源码
wifi,蓝牙 - 无线开关
实现功能:
通过wifi/蓝牙实现远程开关电器或者其他电子设备
电路原理图:
实物图:
深度学习验证工具
虚拟示波器
硬件实物图:
实现原理
基本性能
采集频率: 取决于外部adc模块和ebaz4205矿板的以太网接口速率,最高可以达到100M/8 约为12.5MPS
上位机实现功能: 采集,显示波形,存储wave文件。
参数可运行时配置
上位机:
显示缓冲区大小可调
刷新率可调节
触发显示刷新可调节
又一个modbus调试工具
最近混迹物联网企业,发现目前缺少一个简易可用的modbus调试工具,本软件旨在为开发者提供一个简单modbus测试工具。
主打一个代码简单易修改。
特点:
1. 基于QT5
2. 基于libmodbus
3. 三方库完全跨平台,linux/windows。
开源plutosdr 板卡
1. 完全开源
2. 提高固件定制服务
3. 硬件售价450 手焊产量有线
测试数据
内部DDS回环测试
接收测试
外部发送500MHZ FM波形
matlab测试
2TRX版本
大部分plutosdr应用场景都是讲plutosdr板卡作为射频收发器来使用。
实际上plutosdr板卡本身运行linux 操作系统。是具有一定脱机运算的能力。
对于一些微型频谱检测,简单射频信号收发等应用完全可以将应用层直接实现在板卡上
相较于通过网卡或者USB口传输具有更稳定,带宽更高等优点。
本开源板卡由于了SD卡启动,较原版pluto支持了自定义启动应用的功能。
提供了应用层开发SDK(编译器,buildroot文件系统)。
通过usb连接电脑,经过RNDIS驱动可以近似为通过网卡连接
(支持固件的开发定制)。
二次开发例子
```
all:
arm-linux-gnueabihf-gcc -mfloat-abi=hard --sysroot=/root/v0.32_2trx/buildroot/output/staging -std=gnu99 -g -o pluto_stream ad9361-iiostream.c -lpthread -liio -lm -Wall -Wextra -lrt
clean:
rm pluto_stream
版面分析即分析出图片内的具体文件元素,如文档标题,文档内容,文档页码等,本工具基于cnstd模型