ArduinoIDE + STM32Link烧录调试

本文介绍了如何使用ArduinoIDE配合STM32F103C8T6(Bluepill)调试开源电机控制库SimpleFOC。强调了STM32兼容芯片可能带来的问题,推荐使用官方STM32芯片。详细阐述了STM32在ArduinoIDE中的开发板安装、烧录方式(STLink、串口、USB),并对比了不同烧录方式的优缺点。此外,还讨论了BootLoader的选择和USB接口作为串口的配置选项。
摘要由CSDN通过智能技术生成

最近在用simpleFOC调试电机,simpleFOC库针对开源硬件平台Arduino编写的,所以想先用arduinoIDE先熟悉simpleFOC库和源码后,再做裁剪和优化移植到STM32平台上去。

硬件介绍

![在这里插入图片描述](https://img-blog.csdnimg.cn/d3c8ac63a66f4bae8de35a48739e15a3.png在这里插入图片描述

硬件使用STM32F103C8T6最小系统板,官方叫做Bluepill,某宝上面一大堆。需要注意芯片是STM32还是其他国产的兼容芯片。我测试过GD32F103C8T6,WCH32F103C8T6,这两个可以用STM32CubeMX生产的程序直接下载,但是在ArduinoIDE里面很多功能都无法正常使用,比如SPI接口,时钟设置等。所以要用arduinoIDE开发的话还是要用STM32F103,不要用兼容芯片,否则出了问题都不知道怎么解决。目前STM32对ArduinoIDE的支持是最到位的。详细可以参考stm32duino的GitHub说明,还有stm32duino论坛

开发过程

安装stm32duino开发板

首先需要在ArduinoIDE里面安装STM32的支持包,有两个版本,一个是stm32duino官方版,具体参考Getting started;另一个版本是rogerclark的版本,具体参考STM32F103C8T6在Arduino IDE里编程。亲测觉得官方版更稳定一些,配置端口也更灵活。推荐新手直接用官方版的

烧录方式

在这里插入图片描述

烧录方式主要有三种,三方方式的原理各不相同:可以参考Upload methods

  1. 用STLink烧录器烧录,需要单独的烧录引脚SWIO、SWCLK。如果习惯了用MDK开发,手上有STLink,这种方式是最稳定,速度最快的。上图中STM32CubeProgrammer(SWD)就是这种方式,BMP(Black magic Probe)应该也是这种方式,需要BMP烧录器,具体没有测试过。目前我使用的方式
  2. 用串口烧录,需要TX、RX引脚,并通过USB转串口工具连接电脑。先把Boot0接3.3V,boot1接0V,从SRAM启动,程序烧录完成后,再把boot0接0,从Flash启动。这种方式比较麻烦。上图中STM32CubeProgrammer(Serial)就是这种方式
  3. USB烧录,直接用开发板上的USB接口烧录,不需要额外的硬件支持。这种方式的优点是不需要额外的硬件。但是需要先给芯片烧录一个引导程序,也就是BootLoader,这个BootLoader需要占用一定的flash空间。上图中的STM32CubeProgrammer(DFU)、HID BootLoader(2K)、Maple DFU BootLoader(20K)、Maple DFU BootLoader original都是这种方式。
  • 本人亲测,用maple DFU boatloader只能烧录一个,烧录完了之后,程序会覆盖掉BootLoader引导程序,使得无法进行多次烧录。但是用rogerclark的版本的开发板支持包就不存在这个问题
  • HIDbootloader采用的是USB协议中的HID(Human Interface Device )子类,具体烧录过程可以参考这个视频
    PS:rogerclark的版本的开发板支持包存在另外的问题:simpleFOC使用6PWM驱动时无法正常输出PWM,同样的程序官方版开发板支持包可以正常输出

用stm32programmer时,官方建议STLink的1脚TVCC不要连接,只接GND、SWIO和SWCLK三个引脚,但是我实测TVCC脚必须接,否则stm32programmer无法识别MCU芯片。虽然TVCC电压只有1.6V,无法给MCU供电,官方解释避免USB供电与STLink供电发生意外。不知道什么原因。
在这里插入图片描述

bootloader 下载安装方式

bootloader的下载实际上跟电脑主板上的很相似,只是更小一些,其本质就是放在STM32芯片Flash区域的一段引导代码,程序开始启动的时候会率先执行,然后再BootLoader的引导下再进入自己编写的主程序当中。需要先把BootLoader.hex/.bin文件先烧录到flash的首地址区域0x08000000,可以通过STLink、UART、USB等不同的方式烧录。

maple bootloader对STM32官方包支持不太好,本人测试每次烧录完都会把BootLoader覆盖掉,重新烧录BootLoader才能再次烧录。而且maple bootloader占用20K的flash空间,本来STM32F103C8T6只有64K的flash空间,BootLoader就占了将近1/3.

HID BootLoader采用USB的子模块,把USB动作human interface device,占用的flash空间也很小,只有2k。烧录完HID BootLoader后,重新插上USB,在PC设备管理器中会增加一个人体学输入设备–USB输入设备。PS:只有刚烧录完BootLoader,还没有下载任何arduino程序时才会出现,如果arduino程序中设置了使用USB,那么芯片从boatloader启动后会立即跳转到main程序中,所以PC端口会出现STM Serial设备,而不是USB输入设备了,用户程序中USB设备的设置详见下文。

注意:HID BootLoader下载时需要把其它的USB设备都拔掉(比如USB转串口,STLink、JLink等),因为在下载时arduinoIDE会在PC的设备列表中自动查找适合的USB设备,多个USB设备很可能导致查找USB设备失败。
在这里插入图片描述

烧录过程信息输出如下图
在这里插入图片描述

其它问题

使用ST官方版本的开发板支持包,想要把PA11、PA12脚的USB脚作为USART串口使用需要设置相关USB选项为CDC(Communication Device Class)模式。通过ST官方提供的协议把USB口作为虚拟串口来用,好处是不用外接USB转串口板了,代价是需要一定的Flash空间烧录对应的USB协议。
在这里插入图片描述
三个子选项含义:

  1. CDC(generic ‘serial’ superede U(S)ART),作为系统默认串口,自动编译,无需在程序中再次声明即可使用。如果在程序中声明则会报错:重复定义

  2. CDC(no generic 'serial),不作为系统默认串口,使用前需要首先声明

  3. HID(keyboard and mouse),是USB协议中的HID子类(Human Interface Device),是直接与人交互的设备,例如键盘、鼠标与游戏杆等。

    在这里插入图片描述
    U(S)ART配置三个子选项含义:

  4. Enabled(generic ‘serial’ ),作为Serial1,自动编译,无需在程序中再次声明即可使用。如果在程序中声明则会报错:重复定义

  5. Enabled(no generic 'serial),不作为系统默认串口serial1,使用前需要首先声明

  6. Disabled(no serial support),不支持硬件串口,只能使用软件模拟串口

//STM32 hardware serial instances
HardwareSerial Serial1(PA10, PA9);  //已经在generic serial中设置,再次声明会报错。只能在设置generic serial和声明中二选一
HardwareSerial Serial2(PA3, PA2);
HardwareSerial Serial3(PB11, PB10);

void setup()
{
  Serial.begin(115200);
  Serial1.begin(115200);  //TX=PA9,RX=PA10
  Serial2.begin(115200);  //TX=PA2,RX=PA3
  Serial3.begin(115200);  //TX=PB10,RX=PB11
}
void loop()
{
  delay(100);
  Serial.println("Test Serial");
  Serial1.println("Test Serial1");
  Serial2.println("Test Serial2");
  Serial3.println("Test Serial3");
}
  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值