你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

通过 STLINK-V3SET I2C 接口将程序下载到 SRAM 中并执行的方法

[复制链接]
STMCU小助手 发布时间:2022-5-20 19:15
1.引言
STM32 MCU 在 bootloader 模式下,可以通过多种可用外设(USART、CAN、USB、I2C、SPI等)将程序下载到内部存储器中,详细内容可参考应用笔记 AN2606《STM32 microcontroller system memory boot mode》。本文档主要介绍利用 STLINK-V3SET 调试/编程工具的 I2C 接口将程序下载到 SDRAM 中并执行的方法。
  T7 L4 t! l# P  I
640 (14).png

' e# T7 V! Y! D0 R, t" M0 G
0 W0 V+ L7 V7 z+ O8 g7 Z5 k; j6 v
2.问题描述
问题源自客户的实际需求,希望通过 I2C 接口将程序下载到 SRAM 中执行,进行芯片功能性测试。
  c9 f3 z0 C% F+ M! O3 p  t
8 G7 t9 n0 x1 V
3.问题分析与定位
关于在 Bootloader 模式下的应用程序下载,有多篇 LAT 可参考。例如《如何使用STM32NUCLEO 板来测试串口 Bootloader》、《一种在 IAR 中实现通过 SRAM 应用程序跳转到bootloader 的方法》等。应用程序下载到 SRAM 中,也有 LAT 可参考,如《一种在 IAR 中实现通过将程序在 SRAM 中调试的方法 》。通过调研,STLINK-V3SET 支持 I2C Bootloader 程序下载,可以实现在 bootloader 模式下的将应用程序下载到 SRAM 中。
5 h* L8 m7 ^) h6 i% P) q
, f% G$ X) R* U5 l# R! c
4.问题解决
本文档以 NUCLEO-F401RE 开发板为例进行介绍。本文档介绍方法分为 3 个步骤,首先进行硬件配置与接线,使得 STM32F401RE 与 STLINK-V3SET 通过 I2C 相连,同时保证 STM32F401RE 复位后可进入 bootloader 模式;其次进行软件配置与编程,通过 IAR 可以将程序下载到 SRAM 中;最后通过 STM32CubeProgrammer 软件进行程序下载并运行。下边按三个步骤分别介绍。
& w- z8 f# |8 \4 H. {% V* Q% A
4.1 硬件配置与接线
# D* o* Y) k) k
查看 AN2606 可知,通过 Boot0,Boot1 的硬件设置(Boot0 = 1,Boot1 = 0),可使 NUCLEO板上电复位后进入 bootloader 模式。STM32F401RE 的 I2C1, I2C2, I2C3 均支持 bootloader,这里选取 I2C1 接口实现在 bootloader 模式下的程序下载功能。

1 U  \- w  l6 D6 i' |* {
640 (13).png
% t' x* L+ b6 p- r
640 (12).png
' ?3 F( m1 |6 o$ h9 t& @! ^$ Q
关于 STLINK-V3SET 与 SRM32F401RE 之间的 I2C 连接,STLINK-V3SET 模块上已提供 680 欧姆上拉电阻,已通过闭合 JP10 跳线激活。同时还需要通过 NUCLEO 板为 STLINK-V3SET 提供 3.3V 供电。参考 AN2606 中 I2C 接线方式,两者的引脚接线如下表所示:

* N9 j) j; n: x: O) n0 J  {
640 (10).png
# b+ V; z8 H: Y# h/ k0 F
最后,用一根 USB Type A 转 Micro B 的线连接 STLINK-V3SET 和 PC,同样通过调试线给STM32 NUCLEO-F401RE 供电。

$ S8 V7 F, u. p4 X0 M0 b5 V/ H0 _
  v; x# Q* d( T/ u
4.2 通过 IAR 将程序下载到 SRAM 中
3 N3 |( F2 @3 c, C; C  |9 e0 i' V
参考另一篇实战经验:《一种在 IAR 中实现通过将程序在 SRAM 中调试的方法》,主要操作为以下 2 点。
; G% K) H* u, D: g( o  c* T
(1)在工程的链接选项中选择 stm32f411xe_sram.icf 。

3 m( R8 G2 F) h: _% D6 b6 Z8 e
640 (8).png
. z7 V6 |' Q2 P6 {
(2)设置一下中断向量表的位置 :

8 w, L+ m' _7 q
640 (7).png

# D; k' O, ~1 u( w/ C6 d4 A' H
4.3 通过 STM32CubeProgrammer 将程序下载到 SRAM 中并运行
( Y; M  o( ]2 t( P# X1 X$ h
由于 bootloader 使用了一部分 SRAM 程序,需要修改下地址避免冲突。参考另一篇实战经验:《一种在 IAR 中实现从在 SRAM 运行的应用程序跳转到 bootloader 的方法》,对于 SRAM 中 bootloader 区域,我们从关于 bootloader 的应用笔记可以看到以下信息 :

. R/ B' T, Y' W2 p! S2 r( @4 T
640 (6).png

8 M8 _. L& R7 d* M* |; C
1 B9 l  e/ M6 ]# j: n# k
从红色部分我们可以看到 bootloader 使用了一部分内部 SRAM,因此我们需要在stm32f411xe_sram.icf 中修改代码运行的起始地址来避免与 Bootloader 运行时的冲突:

5 L9 y' _8 P; n, `/ _" j0 A
640 (5).png

6 z6 v& c3 R! @. J& u' p/ q
同时,需要修改下中断向量表的偏移量:
& N0 z3 F/ i, h" N6 u
640 (4).png
6 o1 T" m: `* k# P

* s3 u, u9 a. X+ I
在应用中我们写入以下程序 ,每隔 1s 闪烁 LED 灯。
! g; E, r- O  X7 T
640 (3).png

' `" K1 W& q5 m2 S$ M2 n. d* s' b
最后,通过 STM32CubeProgrammer 进行程序下载。打开 STM32CubeProgrammer(版本 2.6),在 Serial number 选择 STLINK-V3SET,相关配置如图所示。端口选择 I2C,波特率设为 400KHz,地址设为 0x39(地址为 7 位,例如 STM32F401RE I2C1 地址为 0b0111001x,则 I2C 设置的地址为 0b0111001,即 0x39,不同系列 MCU 地址可能不同,请查看 AN2606)。
: p' R+ h8 }" R) ]. x0 N" Q
640 (2).png
( }4 b2 k! {3 S; f* v  |
点击 Connect 后,如果连接成功,如图所示。

7 S" `/ w  R3 U$ s
640 (1).png

8 a( G+ o- u$ J: Z: }6 s% y. d
点击 Erasing & Programming,加载 Hex 文件,勾选 Verify programming 和 Run after programming,如下图所示。点击 Start Programming,开始程序下载。程序下载成功后,可以看到 LED2 以 1Hz 频率闪烁,同时 STM32CubeProgrammer 断开连接。若要重新连接,需要按 NUCLEO 板上的复位键,使得 MCU 进入 bootloader 模式。

# Y, z. c/ N( h$ w+ _
640.png
3 h( w, p+ ]2 S' s$ x
! E' c  x  d6 D4 v, Q

" I, V% H# u5 K( E: o0 ], S
小结
利用 STLINK-V3SET,通过 STM32CubeProgrammer 软件的 I2C 接口下载程序生成的 HEX 文件后,我们可以看到程序下载到 SRAM 运行之后,LED 灯每隔 1s 闪烁 1 次,应用程序下载成功。

" P7 r0 e. W- Z1 C8 h
640 (11).png
640 (9).png
收藏 评论0 发布时间:2022-5-20 19:15

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版