飞道的博客

STM32Duino 开发环境配置

462人阅读  评论(0)

STM32Duino:突然心血来潮,想到STM32Duino这个东西,就是在Arduino IDE 上开发STM32的板子。以前遇到过这种开发模式,但是没有亲自上手设置过。搞了大半天,查看了好多的文档和视频,看别人都是设置成功了,但是我却搞不赢,不过最后还是鼓捣成功了(在开发环境的配置上的从来没有一帆风顺过)
踩坑:我就索性自己再写一个流程,再总结一下里面的坑!

你在看我这篇文章之前可以通读一遍再操作!!
本文仅发布在CSDN 青云双青 和个人博客,其他地方均为搬运

需要准备的

  • STM32F103RCT6最小系统一个(需要可设置BOOT0/1引脚电平模式)
  • ST-Link(带有SWCLK/SWDIO口) 下载器一个,有那种USB口的或者ST官方的那种大的都可以
  • 数据线一根,我用的是Mini USB,给那个只能给STM32供电使用的那个口使用
  • Windows(Win10)操作系统电脑,已经安装好Arduino IDE 1.8.12和ST-Link的驱动
  • 支持STM32的硬件文件(支持STM32F1和F4的 )下载地址:Github原地址 网盘地址
  • 给STM32Duino的BootLoader 下载地址:Github原地址 网盘地址
  • 开发板管理器Arduino SAM Boards(需要在ArduinoIDE 里面安装)

备选的,在有的步骤中需要用到

  • USB转TTL(CH340G、CP2102或者FT232都可以)
  • ST官方的FlashLoader烧录软件 下载链接
  • USB转TTL-CH340G驱动下载 下载地址

0x01、方法一(程序直接烧录法)

步骤1、下载STM32硬件支持文件,并复制到Arduino的安装路径下的hardware目录下

将上面的STM32硬件文件下载并解压出来(这个是Github上的大佬整的,感谢大佬和其他提供技术支持的人)复制到Arduino的安装路径下,下面是文字说明

文字演示
以我的Arduino的安装路径为例子,我的安装路径为:E:\Program File\Arduino\arduino-1.8.12,在这路径下面你可以看到你的arduino.exe这个文件,同时也可以看到我们放置的目标文件夹hardware,直接原封不动地复制到这里即可


内容说明
进到Arduino_STM3文件夹内,你可以看到

项目 说明
drivers 在里面的win文件夹下放的有用到的maple串口驱动安装文件(稍后安装)
STM32F1 F1支持文件
STM32F4 F4支持文件
tools 里面有三种操作系统对应的烧录程序对应的文件夹,在win里面的stm32flsah.exe 可以提供烧录BootLoader使用(稍后说明)

结果
打开你的Arduino IDE,在工具>开发板XXX往下翻就可以看到有好多的STM32支持的板子类型,有STM32F1和F4shuo说明你已经添加成功!

步骤2、去Arduino IDE安装Arduino SAM boards(对于STM32的Arduino支持扩展包)

网络良好的情况下操作(什么意思你懂的,记得开启全局模式哦)
在Arduino的首选项附加开发板管理器网址中填入:

https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json

保存,然后到工具>开发板XXX>开发板管理器,然后搜索SAM,选择默认的版本,点击安装,然后就是等待安装即可(网络良好的话其实挺快的)


如果你不具有良好的网络环境

那么就下载这个文件,下载地址 其实就是我安装后复制给你一份,你只要把它放在特定的位置也是可以用滴
下载完成后解压,然后原封不动地复制到这个路径

C:\Users\你的用户名\AppData\Local\Arduino15\packages

内容说明
可能是一些支持串口或者ST-Link的编译工具之类的东西吧
结果

步骤3、到Arduino IDE中,开始烧录Blink demo

需要进行的操作

方案A:软件端的设置(使用STLink下载)

  • 在示例中找到Blink 例程 并打开
  • 工具>开发板XXX的下拉菜单中选择Generic STM32F103R series
  • variant中选择STM32F103RC(48KRAM 256KFlash)
  • Upload method中选择STLink

硬件端的设置(接线)

  • 将STLink与STM32开发板连接(记得使用5V连接)
  • 给STM32额外供上电(如果你的STLink不能自己供电时使用)

情况1
BOOT0 = 0,BOOT1 = 0
在这种情况下可以正常给板子下载进去程序,并且按复位键也没事儿,程序不会中断

情况2
BOOT0 = 1,BOOT1 = 0
在这种情况下可以给板子下载进去程序,但是按下复位键后程序即停止执行,再次下载程序后才会运行

下载动图演示


说明

  • PA8对应STM32的LED0,PE2对应STM32的LED1
  • 为什么会产生不同的接法出现不同的现象,你可以去了解一下STM32的BOOT模式的相关文章
  • 这种烧录方法不能让STM32打印数据,就是Serila.print()函数不能使用,没有办法解决么?有的,继续往后看

方案B:软件端的设置(使用CH340G烧录器下载)

  • 在示例中找到Blink 例程 并打开
  • 工具>开发板XXX的下拉菜单中选择Generic STM32F103R series
  • variant中选择STM32F103RC(48KRAM 256KFlash)
  • Upload method中选择serial

硬件端的设置(接线)

  • 插上CH340G烧录器,获得串口(在设备管理器中查看)
  • 如果没有引出的RX、TX引脚地话,那就得接到PA口的串口引脚上,接发如下图
CH340G端 单片机端
GND GND
5V 5V
RX PA9(TX)
TX PA10(RX)

说明

  • 由于在我的测试中有这种情况下大概率载不进去程序的情况出现,可能是我的问题,但是你如果可以使用的话也可以采用串口下载
  • 同样也需要设置BOOT0/1的电平,但是都得看你自己鼓捣喽
  • 代码打开方法以及需要修改的地方同上操作

总结

  • 方法一的操作虽然方便,但是有弊端和Bug,看情况使用
  • 个人能力有限,没有排查出来问题所在

0x02、方法二(烧录BootLoader)

步骤4、先安装STM32的新的串口驱动

你要问我这个串口是啥,我也不清楚,只是知道多了一个叫maple的串口

你需要了解的

  • 这个串口不是PA8、PA9的那种串口,而是从STM32F103RC板子上带的那个供电的Mini USB生成的串口
  • 这个串口的出现需要安装驱动,并且没有烧录Bootloader的话不会出现
  • 更多的东西可以在这里了解 点击链接查看

maple串口驱动的安装

打开你在步骤一复制的文件夹,进到drives文件夹内,再进到win文件夹内,你就能看到


接下来以管理员的方式运行那两个bat批处理文件,等待出现success字样即可


然后,这个文件夹就会变成这个样子

接着下一步!

方案A、使用软件烧录对应的Bootloader文件

接线(CH340G串口烧录)

  • 参考上面的步骤三的方案B的CH340G烧录接线法接即可
  • 安装ST官方的FlashLoader工具(在文章开始有安装包链接)
  • BOOT0 = 1,BOOT1 = 0,一定要这样接哦,要不软件不会识别的,然后在烧录完成后恢复默认

烧录

  • 烧录的话,烧录什么呢?这就需要用到还是那位Github上的大佬提供的BootLoader文件,同样,在文章开始有下载地址
  • 这个BootLoader文件夹放在哪里都可以
  • 烧录的文件在binarie文件夹中,打开会有好多的,选择哪个呢?

以C8T6和RCT6为例

项目 对应板子
gd32f1_generic_boot20_pc13.bin STM32C8T6
generic_boot20_pa1_button_pa8.bin STM32RCT6
  • 这个是怎么看出来的呢?应该是根据LED0连接的引脚判断的

烧录动图演示

注意

  • 烧录完成后记得把BOOT0 = 0,BOOT1 = 0

结果
重启Arduino IDE,拔掉CH340G串口下载器,插上我们准备的Mini USB,然后你就会在串口出看到Maple MIni
Oh~~ 出现了这个,你以后就可以只用一根线随便下载喽!!!

方案B、使用命令烧录对应的Bootloader文件

接线同上

  • 注意在烧录时BOOT1 = 0,BOOT 0 =1

烧录

  • 烧录的文件跟上面一样,但是这次方式变了,使用文件中自带的烧录程序stm32flash.exe进行烧录

查看步骤一的STM32_Arduinotools文件夹下的win文件夹

你会看到

注意

  • 记得把需要烧录的bin文件复制到这个地方,方便查找·

然后在cmd命令行中打开这个位置

查看相关的信息的指令

stm32flash.exe COM14(输入识别到的对应的串口,然后就能看到相关的芯片信息)

要使用这行指令烧录哦

stm32flash.exe -w generic_boot20_pa1_button_pa8.bin -v -g 0x0 COM14

知道更多指令的相关含义,执行帮助命令查看

stm32flash.exe -help(查看帮助命令)

接下来动图演示

  • 剩下的操作与上面就一样了,转换BOOT的电平,然后去Arduino IDE看看有没有maple Mini出现
  • 记得在上传代码的时候把Upload method修改成STM32duino bootloader,因为现在你已经烧录了bootloader了,可以使用了

总结

  • 方案二的操作可以使用串口打印,并且下载程序的话只需要一跟Mini线即可
  • 这种方法适用于市面上的成品板子,可以设置BOOT电平和留有maple的串口,自己打的板子可能需要飞线或者查找相关的资料解决这个问题
  • 其实这个maple端口是跟STM32的引脚相连的,我就不再深究是哪两个了
  • 这种操作可以使STM32兼容大多数的Arduino的库,具体问题的话具体再说

0x03、下载一个代码看看效果

这里写一个LED闪烁和串口打印数字的代码
其实在STM32Duino中不用太在意波特率,因为都能打印
代码下载过程中板子会重启,你可以听到两次设备识别音

0x04、剩下的给你探索

相信你选择使用STM32Duino可能是想自己玩玩或者想借助STM32的优势让自己的代码运行的更好
我们就以STM32C8T6和rduino UNO R3做个比较

项目 STM32C8T6 Arduino UNO R3
晶振频率 72M 16M
价格 ¥6-13 ¥13-35
可扩展性 优(引脚多,精度高)
  • 这篇文章算是我的踩坑记录,有些问题我也没整明白,或者不详细,或者有错误。如果你看到的话可以评论哦
  • 更加详细的说明请移步 Github
  • 怎么回退,直接插上ST-Link下载一个STM32的示例代码就都回来了

本文使用Markdown语法编辑,如果有疑问可以留言!


转载:https://blog.csdn.net/sinat_41690014/article/details/105456572
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场