STM32Duino
:突然心血来潮,想到STM32Duino这个东西,就是在Arduino IDE 上开发STM32的板子。以前遇到过这种开发模式,但是没有亲自上手设置过。搞了大半天,查看了好多的文档和视频,看别人都是设置成功了,但是我却搞不赢,不过最后还是鼓捣成功了(在开发环境的配置上的从来没有一帆风顺过)
踩坑
:我就索性自己再写一个流程,再总结一下里面的坑!
你在看我这篇文章之前可以通读一遍再操作!!
本文仅发布在CSDN 青云双青 和个人博客,其他地方均为搬运
STM32F103RCT6
最小系统一个(需要可设置BOOT0/1
引脚电平模式)ST-Link
(带有SWCLK/SWDIO口) 下载器一个,有那种USB口的或者ST官方的那种大的都可以Mini USB
,给那个只能给STM32供电使用的那个口使用Arduino SAM Boards
(需要在ArduinoIDE 里面安装)USB转TTL
(CH340G、CP2102或者FT232都可以)FlashLoader
烧录软件 下载链接hardware
目录下将上面的STM32硬件文件下载并解压出来(这个是Github上的大佬整的,感谢大佬和其他提供技术支持的人)复制到Arduino的安装路径下,下面是文字说明
文字演示
以我的Arduino的安装路径为例子,我的安装路径为:E:\Program File\Arduino\arduino-1.8.12
,在这路径下面你可以看到你的arduino.exe
这个文件,同时也可以看到我们放置的目标文件夹hardware
,直接原封不动地复制到这里即可
项目 | 说明 |
---|---|
drivers | 在里面的win 文件夹下放的有用到的maple 串口驱动安装文件(稍后安装) |
STM32F1 | F1支持文件 |
STM32F4 | F4支持文件 |
tools | 里面有三种操作系统 对应的烧录程序对应的文件夹,在win 里面的stm32flsah.exe 可以提供烧录BootLoader 使用(稍后说明) |
结果
打开你的Arduino IDE,在工具
>开发板XXX
往下翻就可以看到有好多的STM32支持的板子类型,有STM32F1和F4shuo说明你已经添加成功!
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的编译工具之类的东西吧
结果
方案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的电平,但是都得看你自己鼓捣喽
- 代码打开方法以及需要修改的地方同上操作
你要问我这个串口是啥,我也不清楚,只是知道多了一个叫maple
的串口
你需要了解的
- 这个串口不是PA8、PA9的那种串口,而是从STM32F103RC板子上带的那个供电的Mini USB生成的串口
- 这个串口的出现需要安装驱动,并且没有烧录Bootloader的话不会出现
- 更多的东西可以在这里了解 点击链接查看
maple
串口驱动的安装
打开你在步骤一复制的文件夹,进到drives
文件夹内,再进到win文件
夹内,你就能看到
接下来以管理员的方式运行那两个bat
批处理文件,等待出现success
字样即可
接着下一步!
接线(CH340G串口烧录)
- 参考上面的步骤三的方案B的
CH340G
烧录接线法接即可- 安装ST官方的FlashLoader工具(在文章开始有安装包链接)
BOOT0 = 1,BOOT1 = 0
,一定要这样接哦,要不软件不会识别的,然后在烧录完成后恢复默认
烧录
binarie
文件夹中,打开会有好多的,选择哪个呢?以C8T6和RCT6为例
项目 | 对应板子 |
---|---|
gd32f1_generic_boot20_pc13.bin | STM32C8T6 |
generic_boot20_pa1_button_pa8.bin | STM32RCT6 |
烧录动图演示
注意‘
烧录完成后记得把BOOT0 = 0,BOOT1 = 0
结果
重启Arduino IDE,拔掉CH340G串口下载器,插上我们准备的Mini USB,然后你就会在串口出看到Maple MIni
Oh~~ 出现了这个,你以后就可以只用一根线随便下载喽!!!
接线同上
- 注意在烧录时
BOOT1 = 0,BOOT 0 =1
烧录
- 烧录的文件跟上面一样,但是这次方式变了,使用文件中自带的烧录程序
stm32flash.exe
进行烧录
查看步骤一的STM32_Arduino
的tools
文件夹下的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了,可以使用了BOOT电平和留有maple的串口
,自己打的板子可能需要飞线或者查找相关的资料解决这个问题maple端口
是跟STM32的引脚相连的,我就不再深究是哪两个了这里写一个LED闪烁和串口打印数字的代码
其实在STM32Duino中不用太在意波特率,因为都能打印
代码下载过程中板子会重启,你可以听到两次设备识别音
相信你选择使用STM32Duino可能是想自己玩玩或者想借助STM32的优势让自己的代码运行的更好
我们就以STM32C8T6和rduino UNO R3做个比较
项目 | STM32C8T6 | Arduino UNO R3 |
---|---|---|
晶振频率 | 72M | 16M |
价格 | ¥6-13 | ¥13-35 |
可扩展性 | 优(引脚多,精度高) | 良 |
- 这篇文章算是我的踩坑记录,有些问题我也没整明白,或者不详细,或者有错误。如果你看到的话可以评论哦
- 更加详细的说明请移步 Github
怎么回退
,直接插上ST-Link下载一个STM32的示例代码就都回来了