当前位置:网站首页>ArduinoIDE + STM32Link烧录调试
ArduinoIDE + STM32Link烧录调试
2022-07-29 05:23:00 【BobBobBao】
最近在用simpleFOC调试电机,simpleFOC库针对开源硬件平台Arduino编写的,所以想先用arduinoIDE先熟悉simpleFOC库和源码后,再做裁剪和优化移植到STM32平台上去。
硬件介绍

硬件使用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
- 用STLink烧录器烧录,需要单独的烧录引脚SWIO、SWCLK。如果习惯了用MDK开发,手上有STLink,这种方式是最稳定,速度最快的。上图中STM32CubeProgrammer(SWD)就是这种方式,BMP(Black magic Probe)应该也是这种方式,需要BMP烧录器,具体没有测试过。目前我使用的方式
- 用串口烧录,需要TX、RX引脚,并通过USB转串口工具连接电脑。先把Boot0接3.3V,boot1接0V,从SRAM启动,程序烧录完成后,再把boot0接0,从Flash启动。这种方式比较麻烦。上图中STM32CubeProgrammer(Serial)就是这种方式
- 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协议。
三个子选项含义:
CDC(generic ‘serial’ superede U(S)ART),作为系统默认串口,自动编译,无需在程序中再次声明即可使用。如果在程序中声明则会报错:重复定义
CDC(no generic 'serial),不作为系统默认串口,使用前需要首先声明
HID(keyboard and mouse),是USB协议中的HID子类(Human Interface Device),是直接与人交互的设备,例如键盘、鼠标与游戏杆等。

U(S)ART配置三个子选项含义:Enabled(generic ‘serial’ ),作为Serial1,自动编译,无需在程序中再次声明即可使用。如果在程序中声明则会报错:重复定义
Enabled(no generic 'serial),不作为系统默认串口serial1,使用前需要首先声明
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");
}
边栏推荐
- Design and implementation of QT learning notes data management system
- 1、 What is the difference between transfer learning and fine tuning?
- ML15-神经网络(1)
- QT learning notes QtSql
- 1、 Focal loss theory and code implementation
- 2、 How to save the images of train and test in MNIST dataset?
- CNOOC, desktop cloud & network disk storage system application case
- Hal library learning notes-13 application of I2C and SPI
- Migration learning notes - adaptive component analysis
- Error importing Spacy module - oserror: [e941] can't find model 'en'
猜你喜欢
随机推荐
2022春招——芯动科技FPGA岗技术面(一面心得)
STM32FF030 替代国产单片机——DP32G030
3、 How to customize data sets?
Wechat built-in browser prohibits caching
Error importing Spacy module - oserror: [e941] can't find model 'en'
三、如何搞自定义数据集?
零基础学FPGA(五):时序逻辑电路设计之计数器(附有呼吸灯实验、简单组合逻辑设计介绍)
iSCSI vs iSER vs NVMe-TCP vs NVMe-RDMA
噪声传感器工作原理是什么?
4、 Application of one hot and loss function
Fasttext learning - text classification
Design and implementation of QT learning notes data management system
5、 Image pixel statistics
迁移学习—Geodesic Flow Kernel for Unsupervised Domain Adaptation
ML4自学笔记
STM8S003国产替代 DP32G003 32 位微控制器芯片
1、 Transmission of file stream on Web page
3、 How to read video?
HAL库学习笔记-12 SPI
基于51单片机的DAC0832波形发生器









