当前位置:网站首页>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");
}
边栏推荐
猜你喜欢

Power Bi report server custom authentication

Low rank transfer subspace learning

Migration learning - geodesic flow kernel for unsupervised domain adaptation

Review of neural network related knowledge (pytorch)

Hal learning notes - Basic timer of 7 timer

倾角传感器精度校准检测

基于STM32开源:磁流体蓝牙音箱(包含源码+PCB)

迁移学习——Low-Rank Transfer Subspace Learning

华为云14天鸿蒙设备开发-Day1源码获取

基于STC51:四轴飞控开源项目原理图与源码(入门级DIY)
随机推荐
三、如何读取视频?
Hal library learning notes - 9 DMA
SimpleFOC调参3-PID参数整定攻略
ML8自学笔记-LDA原理公式推导
迁移学习—Geodesic Flow Kernel for Unsupervised Domain Adaptation
ML9自学笔记
Improve quality with intelligence financial imaging platform solution
Torch. NN. Embedding() details
3、 How to customize data sets?
2022春招——上海安路FPGA岗面经(以及乐鑫SOC面试)
3、 How to read video?
HAL库学习笔记- 8 串口通信之使用
基于msp430f2491的proteus仿真
噪声传感器工作原理是什么?
STM32:麦克纳姆轮进行循迹任务(库函数程序代码)
DP1332E多协议高度集成非接触式读写芯片
ML8自学笔记
Tf.get in tensorflow_ Detailed explanation of variable() function
Transfer joint matching for unsupervised domain adaptation
ML11-SKlearn实现支持向量机