鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    使用Arduino开发STM32之环境搭建

    已定时 已固定 已锁定 已移动
    文档资料
    stm32 pio arduino
    1
    1
    597
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 小鱼小
      小鱼 技术大佬
      最后由 小鱼 编辑

      大家好,我是爱吃猪脚饭的小鱼,今天我们开一个新的小坑,就是用Arduino开发STM32并教你如何使用HAL库在Arduino工程中。之所以要开这个坑的原因是小鱼发现,很多初学者往往很迷恋某一个特定的开发平台,最为突出的就是STM32,记得在小鱼大学那会,开发STM32主要分库函数和寄存器两个流派,最奇怪的是用寄存器的会鄙视库函数,毕竟寄存器人很难看得懂,看不懂的就比较高级-)。小鱼认为,大道至简,把产品设计的简单好用更难但也更能赢得客户,再说现在的AI发展如此迅速,甚至出现了给出模块自动绘制原理图PCB的工具,看样子我迟早会被干掉的(苦瓜脸)。

      所以相比使用IDF开发ESP32和用寄存器库函数或直接HAL开发STM32,小鱼个人比较推崇Arduino,原因在于,使用HAL多行代码才能完成的事情,Arduino一行就可以(当然你会说用cubemx直接配置生成,一行代码都不用,但Arduino平台的生态真的很强,太多库拿来即用了)。

      Arduino 平台的的STM32其实就是封装的HAL库,所以如果你觉得某个Arduino库不好用,你可以自己写,或者直接把原来的HAL库移植过来。

      所以在这个教程中,你将看到使用Arduino和HAL混血的写法,比如这样:
      9f0f15b0-a78f-48d5-8aac-4f7d968619e4-image.png

      还有这样

      d1881064-2c54-4846-b58c-b7f0130587e2-image.png

      以及使用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里新建工程

      3c66ea7e-5a8f-4935-9138-822f71d04e05-image.png

      新建工程

      44386357-cab5-4dc4-972e-6803ba24edb1-image.png

      接着输入

      c40986cb-c8fe-4c87-aeea-535b53388ddf-image.png

      第二个可以选你的板子,小鱼这里买的是stm32103c6t6的最小系统板子,不到10元。

      点Fishish 即可,整个过程会很慢,你可以关闭这个页面,然后用vscode打开文件夹的方式,打开刚刚新建的工程,然后再次点击PIO按钮,这个时候右下角就会出现load相关的进度,直接点取消。

      重点来了。

      点左下角这里

      ddf74d77-e6c5-4c55-bdb8-06d384350a15-image.png

      然后在打开的新的终端里输入

      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 或者点击左下角的 -> 进行上传即可,板子小鱼并没有带回来,今天就没有办法给大家进行演示了,改天补上。

      今天是干货满满的一篇文章,记得点赞再看~

      新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

      1 条回复 最后回复 回复 引用 0
      • 第一个帖子
        最后一个帖子
      皖ICP备16016415号-7
      Powered by NodeBB | 鱼香ROS