关键字:Bootloader, STLINK-V3SET , STM32CubeProgrammer
简介
STM32器件的片内Bootloader存放于系统存储器(boot ROM)中,由ST在芯片生产期
间预编程,用户无法修改。其主要功能是通过可用的串行外设(如USART、CAN、USB、
I2C、I3C、SPI、FDCAN等)将应用程序下载至内部Flash。片内Bootloader提供一系列命
令,主机端可通过这些命令控制MCU执行读、写、擦除等操作。
STM32CubeProgrammer是一款集成化的软件工具,支持多操作系统,提供图形界面和
命令行界面,支持多种连接方式(JTAG、SWD、USB、UART、SPI、CAN和I2C),既可手
动操作,也可通过脚本自动执行。它可作为Bootloader主机端,通过Bootloader命令与
MCU交互,实现对Flash的读写擦除及选项字节的修改等功能。
当前版本(v2.20.0)支持的Bootloader接口包括USB、UART、SPI、CAN和I2C。其
中,部分接口(I2C、SPI、CAN)需配合STLINK-V3SET/V3MOD/V3PWR使用,否则无法
通过STM32CubeProgrammer连接。
鉴于部分用户对如何通过STM32CubeProgrammer利用Bootloader接口与MCU建立连
接存在疑问,本文特此进行详细介绍。
1. 实验准备
本文实验基于以下环境进行,用户可根据实际需求选择,方法大致相同。
➢ 硬件:
▪ 目标板:NUCLEO-L476RG
▪ 调试器:STLINK-V3SET(也可以是STLINK-V3MOD/V3PWR)
➢ 软件:
▪ STM32CubeProgrammer v2.20.0
➢ 下面是一些可以用到的文档:
▪ AN2606: Introduction to system memory boot mode on STM32 MCUs
▪ UM2448: STLINK-V3SET debugger/programmer for STM8 and STM32
▪ MB1136-DEFAULT-C03 Board schematic (NUCLEO-L476RG的原理图)
▪ RM0351 STM32L47xxx, STM32L48xxx, STM32L49xxx and STM32L4Axxx
advanced Arm®-based 32-bit MCUs
2. 连接UART/I2C/SPI/CAN/USB 接口的Bootloader
本章介绍如何通过 STM32CubeProgrammer 搭配 STLINK-V3SET(可选),实现与
STM32 设备 UART/I2C/SPI/CAN/USB 接口 Bootloader 的连接。
2.1. 环境准备
2.1.1.确保STLINK-V3SET已经组装好(I2C/SPI/CAN接口)
STLINK-V3SET(或V3MOD/V3PWR)提供专有USB接口,支持通过多种协议与任
意STM8或STM32目标设备通信,包括SPI、I2C、CAN和UART。该接口可用于与目
标设备的Bootloader进行连接和通信。
若需通过STM32CubeProgrammer与目标设备的SPI/I2C/CAN Bootloader建立连
接并通信,必须使用SLTINK-V3。下图最左侧展示的是全新的STLINK-V3SET,如需使用
这些接口(SPI/I2C/CAN),请根据图示进行重新组装,具体操作详见UM2448。

图1. STLINK-V3SET 组装过程
2.1.2.查看Bootloader 的版本信息
如下图所示 : 根据AN2606,STM32L476RG包含两个Bootloader版本,分别为
0xA3(版本10.3)和0x92(版本9.2),其版本ID地址均为0x1FFF6FFE,如下图所
示。

图2. AN2606 Rev68 Table3 -bootloader ID信息)
由于不同版本的Bootloader支持的接口可能存在差异,需先确认当前MCU所使用的
版本。通过STM32CubeProgrammer可通过以下两种方式查看版本ID,如下图所示:
▪ 方式1:连接MCU后,STM32CubeProgrammer右下角会显示
Bootloader版本号,本例中为0x92(版本9.2)。
▪ 方式2:读取地址0x1FFF6FFE的内容,可直接查看当前Bootloader版本
ID,示例为0x92(版本9.2)。

图3. 查看MCU的bootloader 版本
由于当前Bootloader版本为0x92,建议参考AN2606 Rev68中"71.2 Bootloader
V9.x"章节,了解接口及相关配置信息。

图4. AN2606 Rev68-"71.2 Bootloader V9.x"章节
2.1.3. 确保已添加LSE(USB接口)或HSE(USB/CAN接口)
• 使用USB接口时,需确保MCU已外接LSE(32.768 kHz)或HSE(24、20、
18、16、12、8、6、4 MHz)。
• 使用CAN接口时,需确保MCU已外接HSE(24、20、18、16、12、8、6、4
MHz)。
• 使用其他接口时,因直接使用内部时钟,所以无需外接HSE或LSE。
详细内容请参考AN2606,具体如下图所示:

图5. AN2606 Rev68 Table 158 -- HSE & LSE要求

图6. AN2606 Rev68 Figure 97- Bootloader V9.x selection for STM32L47xxx/48xxx
由于本文涉及CAN和USB两种接口的Bootloader,为确保其正常运行,已在
NUCLEO-L476RG开发板上外接8 MHz的HSE。

图7. 在NUCLEO-L476RG添加 HSE
2.1.4.确保MCU运行在Bootloader(关键步骤)
在连接之前,需要将MCU配置为从Bootloader启动(也可由用户应用跳转至
Bootloader,本文不作介绍)。本文以STM32L476为例,用户可根据实际芯片型号进行
相应配置。

图8. RM0351-STM32L47x的Boot modes
从上图可见,若要选择从系统存储区(Bootloader所在位置)启动,需要设置
BOOT0=1,BOOT1=0。
• BOOT0 的值由 BOOT0 引脚的电平状态决定。
• BOOT1 则是选项字节中 nBOOT1 位的反向值。
在复位后,BOOT0 引脚和 nBOOT1 位上的值会被锁存。
虽然出厂时 nBOOT1 默认值为 1(即 BOOT1 为 0),但为确保正确,建议通过
STM32CubeProgrammer 进行检查。若发现 nBOOT1 不为 1,则需将其设置为 1。
具体检查方法如下图所示。

图9. 通过STM32CubeProgrammer检查nBOOT1的值是否为1
在NUCLEO-L476RG原理图中,BOOT0引脚通过10kΩ电阻下拉至地,默认处于低
电平状态。根据Boot Mode的要求,需将BOOT0设置为高电平,才能从系统存储区
(Bootloader所在位置)启动。因此,需要通过跳帽或杜邦线等方式将CN7接口的5脚
(VDD)与7脚(BOOT0)连接,使BOOT0引脚拉高,达到启动Bootloader的目的。

图10. MB1136(NUCLEO-L476RG原理图)-BOOT0引脚的外部电路

图11. NUCLEO-L476RG - 将BOOT0引脚接到VDD
通过上述配置,可确保复位后BOOT0和BOOT1的值分别为1和0。此时,按下板上
的黑色"Reset"按钮进行复位(可根据实际情况进行操作),MCU将进入系统存储区
(片内Bootloader)运行。
接下来详细介绍STM32CubeProgrammer与Bootloader各接口的连接方法。
2.2. UART接口
AN2606中描述,STM32L476 V9.x版本Bootloader支持三组USART引脚,分别
为:USART1(PA9 & PA10)、USART2(PA2 & PA3)和USART3(PC10 &
PC11)。

图12. AN2606 Rev68 Table158 - USART接口配置
STM32L476 Bootloader的USART接口配置如下(具体连接步骤请参考3.2.3章
节):
• 数据位(Data):8位
• 校验位(Parity):偶校验(Even parity)
• 停止位(Stop bit):1位
• 波特率(Baudrate):1200~115200
由于电脑通常不具备直接串口接口,需使用USB转串口工具连接,一端连接电脑USB
口,另一端连接目标设备的USART接口,才能让电脑识别为串口设备。
USB转串口工具既可选用第三方设备,也可使用STLINK的虚拟串口功能。
2.2.1. 使用NUCLEO板载STLINK虚拟串口连接目标设备USART接口
由于当前使用的是NUCLEO开发板,板载的STLINK虚拟串口已直接连接到MCU的
USART接口。如果使用自制板,则可选择第三方USB转串口工具,或使用STLINK
V3SET连接Bootloader的USART接口(具体请参考3.2.2章节)。在NUCLEO
L476RG板上,STLINK虚拟串口已连接至Bootloader的USART2(PA2 & PA3)接
口,如下图所示。

图13. MB1136(NUCLEO-L476RG)-STLINK虚拟串口
电脑连接NUCLEO板后,设备管理器中会显示ST-LINK虚拟串口对应的COM端口
(如下图所示,COM端口号因电脑而异)。
具体连接步骤请参考3.2.3章节。

图14. 设备管理器中识别到的NUCLEO板上的虚拟串口
2.2.2.使用STLINK-V3SET的虚拟串口连接目标设备的USART接口
STLINK-V3SET 同样提供虚拟串口功能,可用作USB转串口工具。

图15. STLINK-V3SET 的 VCP连接器位置
可使用杜邦线将 NUCLEO-L476RG 的 PC10 和 PC11 引脚,分别连接到 STLINK
V3SET CN3 接口的 TX 和 RX 引脚(如下图所示)。
请注意,STLINK-V3SET CN3 的 TX 是输入引脚,应连接到目标设备的 UART_TX 引
脚;RX 亦同理。

表1. STLINK-V3SET的CN9与NUCLEO-L476RG板上 USART3引脚对应关系

图16. STLINK-V3SET 与NUCLEO-L476RG接线示意图(USART接口)
将STLINK-V3SET 和NUCLEO-L476RG均通过USB线连接至电脑后,设备管理器中
会显示STLINK-V3SET虚拟串口对应的COM端口(如下图所示,COM端口号因电脑而
异)。

图17. 设备管理器中识别到的STLINK-V3SET的虚拟串口
2.2.3.使用STM32CubeProgrammer连接目标设备的USART Bootloader
打开STM32CubeProgrammer,选择UART接口,按照AN2606中的描述进行配置
(如下图所示)。配置完成后,点击"Connect"按钮即可建立连接。

图18. STM32CubeProgrammer的UART配置

图19. UART接口连接成功后的界面
连接成功后,可像通过 SWD/JTAG 连接 STM32CubeProgrammer 那样对设备进行
编程,仅部分功能(如 CPU 选项卡)无法使用。
2.3. I2C接口
如前所述,若需通过STM32CubeProgrammer与目标设备的I2C Bootloader建立
连接并通信,必须使用STLINK-V3系列设备,此处以STLINK-V3SET为例说明。
根据AN2606,STM32L476 V9.x版本Bootloader支持三组I2C引脚,分别为:
I2C1(PB6 & PB7) 、I2C2(PB10 & PB11) 和I2C3(PC0 & PC1) 。

图20. AN2606 Rev68 Table158 -- I2C接口配置
STM32L476 Bootloader的I2C接口配置如下(具体连接步骤请参考3.3.2章节):
• 速率(Speed):最高400 kHz
• 7位地址(7-bit address):0b1000011x(x=0表示写,x=1表示读),连接时在
STM32CubeProgrammer中输入的地址为0x43(0b1000011)
• 模拟滤波器(Analog filter):开启(ON)
2.3.1. 使用STLINK-V3SET的I2C桥接口连接目标设备的I2C接口
STLINK-V3SET提供了I2C桥接口,I2C信号可通过MB1440的CN7、CN9或JP10
(无须上拉时)引出。
适配器模块还提供可选的680欧姆上拉电阻,通过闭合JP10跳线激活。若闭合JP10
跳线,T_VCC(CN1、CN2、CN6或JP10跳线)必须连接至目标设备电源。

图21. STLINK-V3SET的I2C接口相关位置
以下几种接线方式均可实现连接,请根据实际需求选择适合的方案。
方式1:STLINK-V3SET的JP10与NUCLEO-L476RG的I2C3连接

表2. STLINK-V3SET的JP10与NUCLEO-L476RG板上 I2C3 引脚对应关系

图22. STLINK-V3SET 与NUCLEO-L476RG接线示意图(I2C接口)
方式2:STLINK-V3SET的CN9与NUCLEO-L4764G的I2C3连接

表3. STLINK-V3SET的CN9与NUCLEO-L476RG板上 I2C3引脚对应关系

图23. STLINK-V3SET 与NUCLEO-L476RG接线示意图(I2C接口)
方式3:STLINK-V3SET的CN9(带上拉)与NUCLEO-L476RG的I2C3连接


表4. STLINK-V3SET的CN9(带上拉)与NUCLEO-L476RG板上 I2C3引脚对应关系
请根据上表完成连接,并在STLINK-V3SET的JP10位置安装两组跳帽,使SCL和
SDA均通过JP10连接到T_VCC。接线示意图如下:

图24. STLINK-V3SET与NUCLEO-L476RG接线示意图(I2C接口)
2.3.2. 使用STM32CubeProgrammer与目标设备的 I2C Bootloader连接
打开STM32CubeProgrammer,选择ST-LINK接口,随后在"Serial number"中
选中STLINK-V3SET。
根据AN2606中的描述进行配置(如下图所示),配置完成后点击"Connect"按钮
即可建立连接。

图25. STM32CubeProgrammer的I2C配置

图26. I2C接口连接成功后的界面
连接成功后,可像通过 SWD/JTAG 连接 STM32CubeProgrammer 那样对设备进行
编程,仅部分功能(如 CPU 选项卡)无法使用。
2.4. SPI接口
如前所述,若需通过STM32CubeProgrammer与目标设备的SPI Bootloader进行
连接和通信,必须使用STLINK-V3系列设备,此处以STLINK-V3SET为例说明。
根据AN2606,STM32L476 V9.x版本Bootloader支持两组SPI引脚,分别为:
SPI1(PA4、PA5、PA6 与 PA7) 和I2C2(PAB12、PB13、PB14 与 PB15) 。

图27. AN2606 Rev68 Table158 -- SPI接口配置
STM32L476 Bootloader 的 SPI 接口配置如下(具体连接步骤请参考3.4.2章节):
• 模式:从机(Slave mode)
• 工作模式:全双工(Full duplex)
• 数据位宽(Data Size):8位
• 首位传输(First bit):最高有效位优先(MSB First)
• 时钟极性(CPOL):低电平(Low)
• 时钟相位(CPHA):第一个时钟边沿采样(Low)
• NSS管理:硬件NSS信号(Hardware NSS Single)
注意:MCU的VDDUSB引脚需连接至VDD,否则SPI的"Memory Write"操作可
能因电压不足而失败(不同型号MCU略有差异,详见AN2606)。
NUCLEO-L476RG板上VDDUSB默认已连接至VDD,因此本实验无需额外操作。

图28. AN2606对VDDUSB的相关描述
2.4.1.使用STLINK-V3SET的SPI桥接口连接目标设备的SPI接口
STLINK-V3SET 提供SPI桥接口,SPI信号可通过MB1440的CN8和CN9引出。

图29. STLINK-V3SET 的SPI桥接口位置
以下为使用STLINK-V3SET CN9接口与NUCLEO-L476RG板上SPI1接口连接的详
细说明。

表5. STLINK-V3SET的CN9与NUCLEO-L476RG板上SPI1引脚对应关系
请按照上表进行连接,建议使用质量较好的屏蔽线,以降低信号干扰和性能下降的风
险。接线示意图如下所示:

图30. STLINK-V3SET与NUCLEO-L476RG接线示意图(SPI接口)
2.4.2. 使用STM32CubeProgrammer与目标设备的 SPI Bootloader连接
打开STM32CubeProgrammer,选择ST-LINK接口,在"Serial number"中选中
STLINK-V3SET。
根据AN2606中的描述进行配置(如下图所示),配置完成后点击"Connect"按钮
即可建立连接。
注意:若断开连接后重新连接,可能需要先复位MCU设备。

图31. STM32CubeProgrammer的SPI配置

图32. SPI接口连接成功后的界面
连接成功后,可像通过 SWD/JTAG 连接 STM32CubeProgrammer 那样对设备进行
编程,仅部分功能(如 CPU 选项卡)无法使用。
2.5. CAN接口
如3.1.3章节所述,使用STM32L476 Bootloader的CAN接口时,需确保已外接
HSE,且频率仅限于24、20、18、16、12、8、6或4 MHz。前文提到,已在当前板上
已添加8 MHz的HSE。
此外,若需通过STM32CubeProgrammer与目标设备的CAN Bootloader建立连接
和通信,必须使用STLINK-V3系列设备,此处以STLINK-V3SET为例说明。
根据AN2606,STM32L476 V9.x版本Bootloader支持一对CAN引脚:CAN1
(PB8 和 PB9)。

图33. AN2606 Rev68 Table158 -- CAN接口配置
STM32L476 Bootloader的CAN接口配置如下(具体连接步骤请参考3.5.2章
节):
• 初始波特率:125Kbps
• 标识符(Identifier) : 11-bit
2.5.1.使用STLINK-V3SET的CAN桥接口连接目标设备的CAN接口
STLINK-V3SET 提供CAN桥接口,CAN信号可通过MB1440的CN9和CN5引
出 。
• MB1440的CN9:用于连接外部CAN收发器(Transceiver)的输入端。
• MB1440的CN5:适用于无外部CAN收发器(Transceiver)的目标设备,
CN5的CAN_TX连接目标设备的CAN_TX引脚,CN5的CAN_RX连接目标设
备的CAN_RX引脚。使用CN5时需满足以下条件:
▪ JP7(CAN ON)已闭合
▪ CAN电压提供给CN5.CAN_VCC

图34. STLINK-V3SET 的CAN桥接口位置
由于NUCLEO-L476RG板上未集成CAN收发器(Transceiver),因此选择
MB1440的CN5接口。
以下为使用STLINK-V3SET的CN5与NUCLEO-L476RG CAN1接口连接的详细说
明。

表6. STLINK-V3SET的CN5与NUCLEO-L476RG板上CAN1引脚对应关系
请根据上表完成连接,并确保闭合JP7跳线。接线示意图如下所示:

图35. STLINK-V3SET 与 NUCLEO-L476RG接线示意图(CAN接口)
2.5.2.使用STM32CubeProgrammer与目标设备的 CAN Bootloader连接
打开STM32CubeProgrammer,选择ST-LINK接口,在"Serial number"中选择
STLINK-V3SET。
根据AN2606中的描述进行配置(如下图所示),配置完成后点击"Connect"按钮
即可建立连接。
注意:若断开连接后重新连接,可能需要先复位MCU设备。

图36. STM32CubeProgrammer的CAN配置

图37. CAN接口连接成功后的界面
连接成功后,可像通过 SWD/JTAG 连接 STM32CubeProgrammer 那样对设备进行
编程,仅部分功能(如 CPU 选项卡)无法使用。
2.6. USB 接口
如3.1.3 章节所述,使用STM32L476 Bootloader的USB DFU接口时,需确保已外
接LSE(32.768 kHz)或HSE(24、20、18、16、12、8、6、4 MHz)时钟。前文提
到,当前板上已添加8 MHz的HSE。
根据AN2606,STM32L476 V9.x版本Bootloader支持一对USB引脚:USB
(PA11 和 PA12)。

图38. AN2606 Rev68 Table158 -- USB接口配置
注意:MCU的VDDUSB引脚需连接至3.3V(不同型号MCU可能有所差异,详见
AN2606)。
NUCLEO-L476RG板上VDDUSB默认已连接至VDD,因此本实验无需额外操作
2.6.1.连接目标设备的USB接口
若目标板已将USB引脚(PA11与PA12)连接至USB插座,可直接使用USB线连接
该插座与电脑,随后参考3.6.2章节进行配置和通信,以下内容可跳过。
虽然NUCLEO-L476RG板与PA11、PA12连接的USB插座,但这两个引脚已引出。
只需剥开USB线,将其DM线和DP线分别连接到PA11和PA12引脚即可。
根据USB 2.0规范,USB线中不同信号线有对应的颜色标识,剥开后可通过颜色区分
具体信号线。

图39. USB2.0 规范里面对USB线缆的规定
以下为使用剥开的USB线缆与NUCLEO-L476 板上USB接口引脚连接的详细说明

表7. 剥开的USB线 与NUCLEO-L476RG板上 USB引脚对应关系

图40. 剥开的USB线与NUCLEO-L476RG接线示意图(USB接口)
2.6.2.使用STM32CubeProgrammer与目标设备的 USB DFU Bootloader连接
打开STM32CubeProgrammer,选择ST-LINK接口,在"Port"中选择DFU模式
下连接的USB设备。
PID 和VID通常无需修改,STM32CubeProgrammer默认使用ST产品的默认值
(PID=0xDF11,VID=0x0483),如下图所示。配置完成后,点击"Connect"按钮即
可建立连接。

图41. STM32CubeProgrammer的USB配置
图42. USB接口连接成功后的界面
连接成功后,可像通过 SWD/JTAG 连接 STM32CubeProgrammer 那样对设备进行
编程,仅部分功能(如 CPU 选项卡)无法使用。
3. 小结
本文系统介绍了如何使用STM32CubeProgrammer结合STLINK-V3系列工具,通过多种
接口(USART、I2C、SPI、CAN、USB)与STM32系列MCU的片内Bootloader建立通
信。内容涵盖了不同接口的硬件连接要求、时钟配置及软件设置,结合AN2606、UM2448等
官方文档规范,明确了各接口对应的引脚和参数,确保用户能够正确配置和连接目标设备。结
合具体示例,指导用户快速完成Bootloader通信的搭建和调试。
希望本文能启发用户掌握查阅官方文档的方法,了解所用MCU的Bootloader版本及支持
的接口,理解硬件连接和时钟配置要求,从而灵活应用于不同型号的STM32器件。
意法半导体公司及其子公司 ("ST")保留随时对 ST 产品和 / 或本文档进行变更的权利,恕不另行通知。买方在订货之前应获取关于 ST 产 品的最新信息。 ST 产品的销售依照订单确认时的相关 ST 销售条款。 买方自行负责对 ST 产品的选择和使用, ST 概不承担与应用协助或买方产品设计相关的任何责任。 ST 不对任何知识产权进行任何明示或默示的授权或许可。 转售的 ST 产品如有不同于此处提供的信息的规定,将导致 ST 针对该产品授予的任何保证失效。 ST 和 ST 徽标是 ST 的商标。若需 ST 商标的更多信息,请参考 www.st.com/trademarks。所有其他产品或服务名称均为其 各自所有者的财 产。 本文档是ST中国本地团队的技术性文章,旨在交流与分享,并期望借此给予客户产品应用上足够的帮助或提醒。若文中内容存有局限或与ST 官网资料不一致,请以实际应用验证结果和ST官网最新发布的内容为准。您拥有完全自主权是否采纳本文档(包括代码,电路图等)信息, 我们也不承担因使用或采纳本文档内容而导致的任何风险。 本文档中的信息取代本文档所有早期版本中提供的信息。 © 2020 STMicroelectronics - 保留所有权利