
1.引言 STM32 MCU 在 bootloader 模式下,可以通过多种可用外设(USART、CAN、USB、I2C、SPI等)将程序下载到内部存储器中,详细内容可参考应用笔记 AN2606《STM32 microcontroller system memory boot mode》。本文档主要介绍利用 STLINK-V3SET 调试/编程工具的 I2C 接口将程序下载到 SDRAM 中并执行的方法。 & ]0 B2 O& [2 B# D![]() ( }, j$ `, K2 ~ 2.问题描述 问题源自客户的实际需求,希望通过 I2C 接口将程序下载到 SRAM 中执行,进行芯片功能性测试。 2 w8 k4 Q& \. t% M0 P& f4 O3.问题分析与定位 关于在 Bootloader 模式下的应用程序下载,有多篇 LAT 可参考。例如《如何使用STM32NUCLEO 板来测试串口 Bootloader》、《一种在 IAR 中实现通过 SRAM 应用程序跳转到bootloader 的方法》等。应用程序下载到 SRAM 中,也有 LAT 可参考,如《一种在 IAR 中实现通过将程序在 SRAM 中调试的方法 》。通过调研,STLINK-V3SET 支持 I2C Bootloader 程序下载,可以实现在 bootloader 模式下的将应用程序下载到 SRAM 中。 3 Z( c/ j% X3 g+ Z& Y3 j1 r, H; P6 c+ H7 v6 z$ N" o 4.问题解决 本文档以 NUCLEO-F401RE 开发板为例进行介绍。本文档介绍方法分为 3 个步骤,首先进行硬件配置与接线,使得 STM32F401RE 与 STLINK-V3SET 通过 I2C 相连,同时保证 STM32F401RE 复位后可进入 bootloader 模式;其次进行软件配置与编程,通过 IAR 可以将程序下载到 SRAM 中;最后通过 STM32CubeProgrammer 软件进行程序下载并运行。下边按三个步骤分别介绍。 : ~# W* }; l! \7 t! C9 J* q7 H; c4 {4.1 硬件配置与接线 查看 AN2606 可知,通过 Boot0,Boot1 的硬件设置(Boot0 = 1,Boot1 = 0),可使 NUCLEO板上电复位后进入 bootloader 模式。STM32F401RE 的 I2C1, I2C2, I2C3 均支持 bootloader,这里选取 I2C1 接口实现在 bootloader 模式下的程序下载功能。 ![]() ![]() 关于 STLINK-V3SET 与 SRM32F401RE 之间的 I2C 连接,STLINK-V3SET 模块上已提供 680 欧姆上拉电阻,已通过闭合 JP10 跳线激活。同时还需要通过 NUCLEO 板为 STLINK-V3SET 提供 3.3V 供电。参考 AN2606 中 I2C 接线方式,两者的引脚接线如下表所示: - H2 _1 h7 T; K' R5 X7 ]) K![]() 最后,用一根 USB Type A 转 Micro B 的线连接 STLINK-V3SET 和 PC,同样通过调试线给STM32 NUCLEO-F401RE 供电。 4.2 通过 IAR 将程序下载到 SRAM 中 参考另一篇实战经验:《一种在 IAR 中实现通过将程序在 SRAM 中调试的方法》,主要操作为以下 2 点。 & r! i. p' R5 T" b(1)在工程的链接选项中选择 stm32f411xe_sram.icf 。 ![]() (2)设置一下中断向量表的位置 : ![]() 4.3 通过 STM32CubeProgrammer 将程序下载到 SRAM 中并运行 由于 bootloader 使用了一部分 SRAM 程序,需要修改下地址避免冲突。参考另一篇实战经验:《一种在 IAR 中实现从在 SRAM 运行的应用程序跳转到 bootloader 的方法》,对于 SRAM 中 bootloader 区域,我们从关于 bootloader 的应用笔记可以看到以下信息 : ![]() 从红色部分我们可以看到 bootloader 使用了一部分内部 SRAM,因此我们需要在stm32f411xe_sram.icf 中修改代码运行的起始地址来避免与 Bootloader 运行时的冲突: - c/ G5 c+ i$ A6 p3 X![]() 同时,需要修改下中断向量表的偏移量: ![]() 5 b, v! \5 R, w5 \3 |8 I 在应用中我们写入以下程序 ,每隔 1s 闪烁 LED 灯。 ![]() 最后,通过 STM32CubeProgrammer 进行程序下载。打开 STM32CubeProgrammer(版本 2.6),在 Serial number 选择 STLINK-V3SET,相关配置如图所示。端口选择 I2C,波特率设为 400KHz,地址设为 0x39(地址为 7 位,例如 STM32F401RE I2C1 地址为 0b0111001x,则 I2C 设置的地址为 0b0111001,即 0x39,不同系列 MCU 地址可能不同,请查看 AN2606)。 ![]() 点击 Connect 后,如果连接成功,如图所示。 5 _! H6 e8 c: l8 L![]() 点击 Erasing & Programming,加载 Hex 文件,勾选 Verify programming 和 Run after programming,如下图所示。点击 Start Programming,开始程序下载。程序下载成功后,可以看到 LED2 以 1Hz 频率闪烁,同时 STM32CubeProgrammer 断开连接。若要重新连接,需要按 NUCLEO 板上的复位键,使得 MCU 进入 bootloader 模式。 ![]() " E& z' @5 R) ~& K& L: j/ @1 x 小结 利用 STLINK-V3SET,通过 STM32CubeProgrammer 软件的 I2C 接口下载程序生成的 HEX 文件后,我们可以看到程序下载到 SRAM 运行之后,LED 灯每隔 1s 闪烁 1 次,应用程序下载成功。 1 j8 b; e" q, u, v% [% L( u |
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
实战经验 | Keil工程使用NEAI库的异常问题
STM32 ISP IQTune:真正零门槛的免费ISP调整软件
【经验分享】STM32 新建基于STM32F40x 固件库的MDK5 工程
意法半导体MCU双供应链策略,打消中国客户后顾之忧
【经验分享】基于STM32使用HAL库实现USB组合设备CDC+MSC
2024意法半导体工业峰会:赋能智能电源和智能工业,构筑可持续未来
ST推出灵活、面向未来的智能电表通信解决方案,助力能源转型
意法半导体 x Qu-Bit Electronix:推动新一轮的数字声音合成革命