1. 准备工作
1.1 硬件准备
需要准备的硬件:
- 百问网STM32F103开发板;
- ST-Link调试下载器;
- ST-Link转接板;
- ST-Link转接板适配的排线;
- MicroUSB线;
12V DC电源适配器和电脑;
1.2 软件准备
需要安装的软件:
- ST-Link驱动;
- 串口驱动(win10自动安装、win7可能需要自行安装);
- Keil MDK:www.keil.com
- STM32CubeProgrammer: www.st.com
1.3 硬件连接
- ST-Link下载器和转接板相连,转接板和开发板之间使用适配的排线连接起来,最后再将ST-Link的
USB线接入电脑; - MicroUSB连接开发板的USB Debug处,另一端接入电脑;
- 12V DC电源适配器接入开发板的DC 12V处的圆孔,另一端插到220V供电处;
如图:
2. 程序烧写
对于ST的处理器而言,可以使用类似于ST-Link这样的调试下载器进行程序烧写,也可以使用串口、
USB或OTA进行程序烧写,其中ST-Link、J-Link、串口是比较常用的几种方式,这里只对ST-Link和串口
烧写进行演示。
烧写程序也有许多种软件,比较常用的是使用集成开发环境中的烧写功能烧写程序,或者使用这款
处理器官方支持的烧写工具进行程序烧写。对于ST的处理器,支持程序烧写的软件有Keil MDK、IAR、
STM32CubeIDE、STM32CubeProgrammer等,这里只再Keil MDK和STM32CubeProgrammer两个软
件下进行演示。
2.1 使用MDK烧写程序
使用MDK烧写程序,只能通过ST-Link实现,无法通过串口烧写程序。
在烧写程序前,首先要确保的三件事:
- 芯片正常上电且能正常工作;
- ST-Link已经和芯片正确连接,且没有接触不良的情况;
- MDK中的程序已经成功编译,没有报错;
然后就可以点击MDK中的“Load”或者使用快捷键(默认是F8)将编译好的程序烧写到芯片中了,烧写成
功会有提示。烧写完成后将开发板复位或者重新上电,让程序运行。
2.1.1 ST-Link没有正确连接的提示
这种情况下:
- 检查ST-Link的USB线和电脑是否正常连接;
- 检查ST-Link的灯是否亮的是红灯,正常情况下是红灯,处于运行中会是绿灯,异常则是红绿闪
烁,重新将ST-Link在电脑那段插拔下,重启ST-Link;
2.1.2 芯片没有上电就使用MDK的load烧写程序的提示
出现这个提示,首先检查芯片是否正常上电了,如果芯片正常供电,那就参考后面的2.1.3 提示STLink
找不到处理器该如何处理章节。
2.1.3 提示ST-Link找不到处理器该如何处理
芯片已经正常供电,且ST-Link也将芯片和电脑正确连接,ST-Link也亮的是红灯,但是还是弹出了
和2.1.2节那样的提示框,出现这种情况,有两种可能:
- 芯片坏了,需要去排查硬件原因;
- 芯片的SWD引脚被复用成为其它功能了,在程序运行过程中无法再通过SWD引脚进行程序调试或
者下载了;
这里主要说明第二点,硬件原因有太多可能性了,无法演示。
出现第二种情况,目前最常见的情况是烧写了使用STM32CubeMX生成的工程后,就会出现第二种
情况,原因会在视频中复现,推荐的解决方式是使用STM32CubeProgrammer+UART将芯片的内部
Flash整篇擦除,详见2.2章。
2.2 使用STM32CubeProgrammer烧写程序
STM32CubeProgrammer这个软件支持多种接口,多种格式的二进制文件。这里主要演示ST-Link
和UART,烧写的二进制文件则是hex文件。
2.2.1 使用ST-Link连接芯片
在STM32CubeProgrammer软件中,使用ST-Link将芯片和电脑连接起来,可以忽视处理器的启动
方式,任意启动方式均可。但是如果上电后,芯片运行的程序会将SWD引脚复用成其他功能,那么STLink
是无法连接成功的,需要参考2.2.2小节。
在烧写程序前,首先要确保的三件事:
- 芯片正常上电且能正常工作;
- ST-Link已经和芯片正确连接,且没有接触不良的情况;
- SWD引脚没有被复用成为其他功能;
随后在软件中,接口选择ST-Link,参数默认就好,然后点击connect连接芯片,
2.2.2 使用UART连接芯片
在STM32CubeProgrammer软件中,使用UART连接芯片,需要将芯片的启动方式改为从System启
动,也就是红色开发板上的红色拨码开关[1, 2]设置为[ON, OFF],如图:
在烧写程序前,首先要确保的三件事:
- 芯片正常上电且能正常工作;
- 启动方式已经改为从System启动;
然后在软件中接口选择UART,参数默认,再点击connect连接芯片:
2.2.3 擦除
STM32CubeProgrammer支持擦除整片Flash的内容,也支持擦除Flash中指定扇区的内容。擦除动
作需要再芯片通过ST-Link或者UART正常连接后才可以进行。
-
擦除整片Flash的内容
-
擦除Flash中指定扇区的内容
2.2.4 从内部Flash的起始地址开始烧写程序
- 需要注意的是,选择的要烧写的二进制文件不能保存在中文路径中,如果文件被保存在中文路径
下,使用STM32CubeProgrammer点击download或者start programmer后,软件会闪崩。
① 方法1 - 选择文件
可以选择Open file或者边上的+号选择文件:
支持很多种二进制文件,我们这里选择hex文件。
- 烧写
这里有提示烧写的起始地址、文件大小和数据宽度,然后点击Download,将选择的二进制文件烧
写到这个地址开始的内部Flash中。
② 方法2
-
选择文件
-
烧写
2.2.5 从内部Flash的指定位置开始烧写程序
① 方法1
- 选择文件
可以选择Open file或者边上的+号选择文件:
支持很多种二进制文件,我们这里选择hex文件。
- 设置起始地址
起始地址必须是0x0800 0000开始偏移4的倍数,然后点击Download。
② 方法2
- 选择文件;
这里必须选择bin文件,hex文件在这里是无法设置起始地址的,
- 设置起始地址;
起始地址必须是0x0800 0000开始偏移4的倍数:
- 程序烧写
2.2.6 用STM32CubeProgrammer解决ST-Link找不到芯片的问题
在2.1.3中我们提到了一种情况会使ST-Link无法通过SWD引脚连接芯片,遇到这种情况我们就可以
使用STM32CubeProgrammer中的UART来连接芯片,擦除整片Flash的内容,然后再去烧写程序。