2023年8月最新版Arduino STM32Duino教程:使用STM32进行开发

目前,网络上大多数的讲述arduino开发stm32的教程都存在一定的问题(缺少一些关键步骤),以至于会产生误导,本人是看着这些教程一路走来的,通过我的相关搜索,而整理出的一套较为完善的教程。

开发环境搭建

安装IDE

前往官网下载Arduino IDE并安装,这里推荐Arduino IDE 2,有丰富的代码补全功能和更好看的UI以及DEBUG支持(本文可用)

安装开发板

安装好IDE2之后,就需要添加开发板,这里我们使用最广泛的STM32Duino,目前已经基本适配所有的STM32芯片

打开Arduino的开发板管理器:文件 -> 首选项 -> 其他开发板管理地址,增加如下并保存:

https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json

接着在开发板处安装STM32芯片包的支持,一般选择最新版,注意看清楚是STM32,STM8:

由于服务器在国外故此处安装时间较为漫长,有能力的小伙伴可以在首选项的网络选项卡中配置相关信息来提高速度
等待安装结束之后,至此IDE部分的配置已经基本完成,但还不能够正常工作,需要配置烧录工具

配置烧录工具

在开发STM32的时候通常采用SWD而非串口烧录,这里同样如此,需要使用烧录器ST-Link,官方的或是淘宝款的均可。

注意:这里指的是ST-Link,DAP-LINK等均无法使用,但并不是说绝对不能使用,但体验感较差,最后将会讲述使用DAP-LINK的方法,此部分均使用ST-Link,我也推荐使用ST-Link

安装驱动程序

驱动程序采用ST官方的ST-Link驱动程序就可以,若在官网下载,对应STSW-LINK009,其他地方的也可以,看准系统版本对应即可
安装好驱动之后插入STlink可以在设备管理器中看到设备正常工作:

配置烧录器

这部分非常重要但很多的教程都忽略掉了,从而导致不能正常写入芯片程序
去ST官网下载STM32CubeProgrammer 注意看清楚对应的系统,下载并安装
打开之后可以看到连接到你的ST-Link,若是连接到开发板还可以看到芯片信息


这个程序我们主要是调用其CLI,因此安装上就可以了,平时开发的时候也很少直接打开

测试环境

至此,开发环境的搭建已经完成,通常情况下,我们可以写一个点灯程序来测试我们的环境是否正常(此处我的板子是STM32F103ZET6)

  1. Arduino中创建空白工程
  2. 写入以下程序,开发板的LED灯写对应引脚,(我的开发板连接LED的是PE5)
#define LED_PORT PE5  //LED引脚
void setup() {
  pinMode(LED_PORT, OUTPUT);
}

void loop() {
  digitalWrite(LED_PORT, HIGH);
  delay(200);
  digitalWrite(LED_PORT, LOW);
  delay(200);
}
  1. 在 工具 -> 开发板 选择你的开发板芯片型号
  2. 在 工具 -> Board Part Number处选择具体型号
  3. 在 工具 -> Upload Method处选择STM32CubeProgrammer(SWD)
    6.
  4. 将开发板和ST-LINK通过SW的线序相连接:SWDIO、SWCLK、VCC、GND依次对应相接
  5. 编译、烧写均可以正常通过,速度非常快,可以看到LED闪烁

常见问题

  1. arduino下能不能用HAL编程
    STM32duino就是基于HAL写的,基本支持HAL的库函数,能够正常编译
    例如通过拉低电平来开启PE5的LED灯
digitalWrite(PE5,LOW);

可以直接在Arduino中使用HAL写为

HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_RESET);

完全等效

  1. arduino下如何配置时钟树?
    配置时钟树我们需要使用ST的HAL的API,在主程序中重载void SystemClock_Config(void)函数,并在void setup()中调用SystemClock_Config()

    对于这段代码可以自己编写但推荐的是通过STM32CubeMX图形化生成,并在main.c中复制得到

  2. 硬件串口无输出
    当测试到Arduino中按照正确的方式读写硬件串口时但没有任何消息输出,这种情况下大多是没有对应好引脚而造成的,例如我这块开发板就是这样的
    以下这段程序正常编写但没有任何输出

void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.println("hello");
  delay(200);
}

这里通过更改硬件串口对应的引脚解决
参照开发板手册我们可以看到USART在PA9和PA10上
代码更改为

HardwareSerial Serial1(PA10,PA9); //顺序是RX,TX
void setup() {
  Serial1.begin(115200);
}
void loop() {
  Serial1.println("hello");
  delay(200);
}

即可解决

  1. 使用DAP-Link下载程序
    由于STM32Duino没有DAP-Link下载程序支持,需要先生成二进制文件然后通过DAP-Link的烧写程序加载烧录

    接着通过DAP-Link的烧写程序加载烧录
物联沃分享整理
物联沃-IOTWORD物联网 » 2023年8月最新版Arduino STM32Duino教程:使用STM32进行开发

发表评论