详情下载:详细文档>>简介 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 下面是一些可以用到的文档:
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,如下图所示:
▲ 图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接口)
详细内容请参考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开发板上外接8MHz的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引脚和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章节):
由于电脑通常不具备直接串口接口,需使用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章节):
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章节):
注意: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或4MHz。前文提到,已在当前板上已添加8MHz的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章节):
2.5.1. 使用STLINK-V3SET的CAN桥接口连接目标设备的CAN接口 STLINK-V3SET提供CAN桥接口,CAN信号可通过MB1440的CN9和CN5引出。
▲ 图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.768kHz)或HSE(24、20、18、16、12、8、6、4MHz)时钟。前文提到,当前板上已添加8MHz的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器件。 |
【STM32U3 评测】人体行为识别
【STM32U3评测】实战项目:无电池温湿度计
STM32CubeProgrammer 2.22:眼见为实 —— 全新MCU内存映射图形导出界面,规避常规开发错误
重磅升级!STM32CubeProgrammer 2.21 解锁SWD多从机模式,开发效率再飙升!
在主机模式下使用STM32Cube HAL I2C驱动
【问卷有礼】STM32CubeProgrammer—您的声音很重要!
新版STM32Cube for Visual Studio Code开发体验
嵌入式开发效率革命:STM32CubeProgrammer 2.19的自动化和智能化升级(上)
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享4-使用MVP架构从硬件外设读取数据并显示到图形界面、从图形界面发送指令控制硬件外设
微信公众号
手机版