天天看点

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

STM32在ArduinoIDE环境下的开发

1.前言

网上有不少介绍Arduino下开发STM32的帖子,但因为时间发展关系,核心库的开发和第三方库的发展有好几种,另外采用的下载方式也各不相同,因此容易让人进坑。为此,试通过此文综合介绍下STM32在ArduinoIED环境下的开发,减少入坑几率。

2.基本介绍

STM32在ArduinoIDE的环境下开发使用,可以做到程序开发的简单容易,为更多非电子专业的应用提供了便捷条件。使用时要注意几个方面:第一是使用哪个内核做开发;第二个是注意准备使用哪个下载工具如:外带的串口工具,stlink下载器、自带的串口、自带的DFU方式、自带的HIDUSB口等。第三个是关注下BootLoader,一般建议如果有外带下载工具如stlink、USB转串口等工具,那么就不用关心这个BootLoader,用PA9、PA10做串口,或者stlink直接接SWD接口就可以了,省心方便;如果是想接线简单,扎个势,只要连接一跟USB线即可下载程序,那么就关注下Bootloader。

3.支持stm32的Arduino内核

3.1 支持Cotex-M3的arduino官方内核

使用时必须安装此内核,这样才能够对stm32文件进行编译。

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

3.2第三方内核

(1)LibMaple内核

其早期有专门的团队做这方面的开发,即Maple STM32等,团队已经不在了。rogerclarkmelbourne目前仍然支持。其核心库为Arduino_STM32,Bootloaderw为STM32duino-bootloader,看起来还在继续更新,支持之前的Maple STM32 DUF模式。主要硬件支持F1和F4两种,Bootloader主要支持DFU模式。下载地址为:

rogerclarkmelbourne/Arduino_STM32:

https://github.com/rogerclarkmelbourne/Arduino_STM32

rogerclarkmelbourne/STM32duino-bootloader:

https://github.com/rogerclarkmelbourne/STM32duino-bootloader

(2)Steve改进的LibMaple 内核

Steve在原来LibMaple的基础上增加了一个F3的内容。下载地址为:

https://github.com/stevstrong/Arduino_STM32

(3)STMicroelectronics(ST)公司编写的内核

ST官方已经自己整合并开发了自己的STM32的核心库:Arduino_Core_STM32。编译采用GCC-ARM的开源编译器,支持win、linux和marc。该库也支持更多的硬件和开发板,并可以增加自定义的开发板。并且支持ST公司的STM32CubeProgrammer下载方式,可以实现STM32CubeProgrammer的SWD、DFU和Serial的程序下载。同时支持上述两种下载方式:Maple DFU方式和USBHID方式。

这种方式目前支持的芯片和开发板最多,也是最流行的方式。

4.需要BootLoader的开发(无需BootLoader的开发,可参考5.3内容)

这个BootLoader实际是客户方的钩子程序,仍然再用户flash区内。和芯片内部固话的BootLoader程序有一定区别。通常,如上所说的,不想用外部下载设备,或者购买的开发板的Bootloader被刷掉了,那么就需要用到这个BootLoader。

目前开源的BootLoader有DFU方式的,USBHID、USBCDC和SD卡方式的几种。最常用的是DFU和USBHID,其它几种使用范围有限。当然,下载这个BootLoader也要用到外部工具,比如USB转串口工具(刷机线)、或者Stlink。

4.1DFU方式的Bootloader下载(下图为串口方式下载,其它方式也可)

4.24.1.1硬件连接

开发板boot设置:boot0=1,接高电平 boot1=0接低电平

连接如图:Rx—>A9 Tx---->A10 GND–>G VCC–>3.3

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)
STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

4.1.2下载BootLoader到开发板:

1)下载BootLoader文件:

使用https://github.com/rogerclarkmelbourne/STM32duino-bootloader下载包内的二进制文件或者直接进入https://github.com/rogerclarkmelbourne/STM32duino-bootloader/tree/master/binaries下载所需文件。

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

2)用flash_loader_demo工具下载bin到开发板

使用早期的flash_loader_demo_v2.8.0软件工具串口下载,ST官方下载地址: http://www.st.com/en/development-tools/flasher-stm32.html

这个只简单介绍:

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)
STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)
STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)
STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)
STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)
STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

3)使用STM32CubeProgrammer工具下载bin到开发板

软件下载地址:

https://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-programmers/stm32cubeprog.html

下载安装完成后,按下图序号操作:

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)
STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

4.2 USBHID方式的Bootloader下载

1)下载BootLoader文件:

Serasidis/STM32_HID_Bootloader:

https://github.com/Serasidis/STM32_HID_Bootloader

bin文件地址:

https://github.com/Serasidis/STM32_HID_Bootloader/releases

下载并打开文件夹:

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

2)下载bin到开发板

同上,选择hid_generic_pc13.bin,用上述两种软件都可以将bin下载到开发板。

4.3注意

如果使用STM32CubeProgrammer软件工具,那么也可以使用stink下载工具下载BootLoader。

硬件连接如图:

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

软件选择如图:

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

5.内核安装(建议使用第三种5.3)

5.1支持stm32的arduino内核安装方法之一:

1)下载文件包

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

2)解压并创建一个Arduino_STM32文件夹

路径为Arduino安装路径之下。这样在工具----->开发板下能够获得支持的stm32器件或者开发板。

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

如果使用的是Maple或者Maple Mini开发板,那么需要安装串行和DUF驱动。驱动可以在该文件夹下寻找,打开一个CMD windows窗口,在/drivers/win路劲下执行install_driver.bat文件。

3)运行Arduino IDE,然后在“工具”菜单上,选择“ Boards”管理器,然后从可用板列表中安装Arduino SAM板(Cortex-M3)。

必须执行此步骤,它将安装arm-none-eabi-g ++工具链,如上所说的arduino内核程序,将对stm32ARM芯片进行编译。

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

4)注意下载方式的选择

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

如果使用的是前一步下载的BootLoader,是DFU方式的选第一个STM32duino BootLoader,如果下载的是HID那么选择HID BootLoader。如果直接连接的是外部工具,如连接的是usb转串口的选Serial,连接的是stlink选Stlink,Jlink选Jlink,直接连接就和前面的BootLoader没有关系了。

5)打开一个blink程序,编译并上传

void setup() {
  pinMode(PC13, OUTPUT);
  Serial.begin(115200);
}
// the loop function runs over and over again forever
void loop() {
  digitalWrite(PC13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(PC13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
  Serial.println("hello world");
}
           

上传成功提示信息(此处选择HID BootLoader,需要提前下载BootLoader为HID的 BootLoader,IDE中下载方式选择HID BootLoader2.0,硬件直接接USB端口,上传方式选择如下图):

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)
STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

5.2 支持stm32的arduino内核安装方法之二

通过开发板管理器安装arduino内核安装方法:

1)运行Arduino。选择文件->首选项,在附加开发板管理器中填入以下网址:

http://dan.drown.org/stm32duino/package_STM32duino_index.json

这样在开发板管理器内能够获取开发板基本信息,下载会自动安装内核和库。

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

2)选择工具---->开发板----->开发板管理器

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

3)选择下图内容安装

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

注意:下载速度较慢,需要耐心,或者直接翻墙,速度会飙升。

4)选择开发板,配置下载内容

这里看到有两个同样的板子名称,原因是用不同的2种方法安装,所以产生了2个相同名称的板子。

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

同样注意你的下载方式的选择,如果下载了BootLoader使用,那么就选对应的BootLoader,如果直接接外部设备,就选外部下载器。

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

5)打开一个blink程序,编译并上传

void setup() {
  pinMode(PC13, OUTPUT);
  Serial.begin(115200);
}
// the loop function runs over and over again forever
void loop() {
  digitalWrite(PC13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(PC13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
  Serial.println("hello world");
}
           

上传成功提示信息如下图(此处选择DFU,提前下载BootLoader为STM32duino BootLoader,IDE中下载方式选择STM32duino BootLoader,硬件直接接USB端口,上传方式选择如下图):

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)
STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

5.3 ST公司的arduino内核安装

1)运行Arduino。选择文件->首选项,在附加开发板管理器中填入以下网址:

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

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

2)选择工具---->开发板----->开发板管理器

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

3)选择下图内容安装

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

注意:下载速度较慢,需要耐心,或者直接翻墙,速度会飙升。

4)选择开发板,配置下载内容

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

Board选择:

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

如果是下载的BootLoader方式,那么必须选择串口支持,无论是DFU方式还是HID方式,端口都会失去(因为flash被刷新了),但会变成新的串口号,可继续进行后续程序下载,当然后续需要选择端口号,但上传方式选择不变。

如果不是用BootLoader的方式,可忽略。

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

上传方式的选择如下图,根据使用的工具决定,如果是下载的BootLoader,那么选择对应的BootLoader,如果是使用st官方的stm32cubeprogrammer,那么就需要连接stlink,并一定要安装stm32cubeprogrammer。

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

特别要注意的是:

因为安装路径的关系,可能安装路径都不一样,所以需要指定一个环境变量。如图,在我的电脑,右键选择属性项,弹出如下对话框。

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

如图,输入你安装路径的执行路径。

如;D:\Program Files (x86)\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

5)打开一个blink程序,编译并上传

void setup() {
  pinMode(PC13, OUTPUT);
  Serial.begin(115200);
}
// the loop function runs over and over again forever
void loop() {
  digitalWrite(PC13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);              // wait for a second
  digitalWrite(PC13, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);              // wait for a second
  Serial.println("hello world");
}
           

上传成功提示信息(此处选择SWD方式,外接stlink):

STM32在ArduinoIDE环境下的开发(不同的下载方式,不同的BootLoader方式,无需BootLoader方式)

6.总结

网上很多的资料都是用Arduino_STM32的内核,但这个支持的范围有限,使用ST内核Arduino_Core_STM32支持的芯片和开发板越来越多,并且完全开放,可以添加自己的开发板,因此建议用ST的来做开发。