
简介 对于大多数基于 Flash 的系统而言,在最终产品安装之后,能够对固件进行更新,这一点非常重要。这称为在应用中编程 (IAP)。此应用笔记的目的就是为创建 IAP 应用程序提供通用指南。 STM32F10x 微控制器能够运行用户指定的固件,从而执行微控制器内置 Flash 的 IAP。借助这一特性,在重新编程过程中可以使用任意类型的通信协议(如 CAN、USART、USB、SPI 和 I2C 等)。0 M1 q' q% y* p0 c 本应用笔记介绍如何使用 STM32F10x 的 I2C 外设执行在应用中编程。第一步,将 Aardvark工具用作主机,向 STM32F10x 发送 IAP 命令。第二步,将另一 STM32F10x 微控制器用作主机,且该微控制器桥接 PC 与目标器件(USB/I2C 桥接器)。" W, [+ H( [+ B8 J+ M STM32F10x 用作 I2C 存储器,可通过 I2C/接口对其进行编程、擦除和读取。 下面列出了开发过程中使用的 Aardvark 主机适配器版本: ● 固件:Aardvark I2C/SPI Control Center v3.52 -2009.0130& F; A9 n6 A7 N' ] ● 硬件:Aardvark I2C/SPI v3.0 `; }: `3 @) O; B9 g; @# k5 n 7 n; c* B+ E5 ]* y p7 x2 K " f( m+ G( o- g 1 IAP 概述 1.1 原理 可以使用开发工具通过 JTAG 或 SWD 接口,把 IAP 驱动程序烧写到 Flash 的起始地址。此驱动程序使用 I2C,将文件从主机载入 STM32F10x 内部 Flash,然后执行该文件。9 N- a R( T7 e; o: \: A( Y6 J 1.2 用户程序应满足的条件. G0 d S% P/ h. p4 L 将 IAP 应用程序加载到从 Flash 基址开始到 0x0800 0fff 的一段区域。因此,必须将用户应用程序加载到 0x0800 1000 地址以上的 Flash 高地址区域。$ j. a: a4 A/ Q7 J; {) H4 d 9 |1 h9 d1 P" R u ![]() 1.3 全局流程图. ]# w$ w. w0 [+ b) x; Y 2 g6 }; ]/ r0 x" W $ Q% `! J C8 v9 A9 ~ ![]() # `. e+ ^# S5 a8 t' [ 使用连接到按钮的引脚来选择跳转到用户应用程序还是执行用于重新编程的 IAP:. ?. f6 h; Z, m# X: x ● 复位时,按下按钮将执行 IAP$ S$ z% S7 ?; o0 I$ v/ U- ] ● 否则,跳转到用户程序0 w* R" x, ]' M& C: ^ 1.4 IAP 命令3 m1 P' A# G ^7 ]8 r- R) q 1.4.1 读命令 读命令用于从 STM32 的 Flash 中读取数据,并且可以从用户存储空间的任意 Flash 地址开始读取。 ![]() 操作码的值为 OPC_READ 时,执行读命令。目标器件认为操作码之后由主机主器件发送的前四个字节为要从中读取数据的 Flash 地址。紧跟 Flash 地址之后的两个字节表示要读取的数据的大小(字节)。通过 SDA 线将 Flash 中的内容缓存到 I2C1_buffer_Tx,并按字节发送。7 f1 p4 a. _: d+ B/ q 1.4.2 写命令 写命令用于向 STM32 Flash 写入数据,并且可以从用户存储空间的任意 Flash 地址开始写入。; p# ~7 b! v, ?3 [ c0 X ![]() 图 4. 写命令流程图" [ V% c/ c) ` 操作码的值为 OPC_WREN 时,执行写命令。目标器件认为操作码之后由主机主器件发送的前四个字节为要写入数据的 Flash 地址。紧跟在 Flash 地址之后的两个字节表示要写入的数据的大小(字节)。将从主机主器件接收的 N 个字节缓存到 I2C1 Buffer Rx。写入数据前,要擦除相应 Flash 页。 ! \) U3 z7 U: V0 C) ~" F4 w) K 1.4.3 擦除页命令6 N9 w: m; @0 O7 V) M- } 擦除页命令用于擦除用户存储空间中从任意 Flash 基址开始的页。对于中容量器件,可擦除页的数量在 0x0001 与 0x007B 之间(1 到 124 页);对于大容量器件,可擦除页的数量在0x0001 与 0x00FE 之间(1 到 254 页)。% P6 C9 f# l8 N# z6 @. }8 M ![]() & y6 O/ p( L, q' R3 t& ~ 操作码的值为 OPC_ERPG 时,执行擦除页命令。目标器件认为操作码之后由主机主器件发送的前四个字节为 Flash 地址。紧跟在 Flash 地址之后的两个字节表示要擦除的页数。收到该地址和页数后,目标器件 STM32 将擦除相应的 Flash 页。6 l; `3 s2 B. V4 \1 D( Z/ T% } & C) i/ h9 o/ a 1.4.4 擦除用户存储空间命令5 e3 N$ z* X4 h 擦除用户存储空间命令可擦除用户存储空间中从 Flash 地址 0x0800 1000 开始即以上的所有页。$ z+ z& e# J/ i ) e1 a& S l! }. c/ X7 r: g, G ![]() 操作码的值为 OPC_ERUSM 时,执行擦除用户存储空间命令。顾名思义,此命令将擦除从Flash 基址 0x0800 1000(用户空间起始地址)及以上的所有页的内容。2 { M6 L6 ?* W- R2 } : Y, |! H: s/ X& Y) D% Y 1.4.5 转到用户代码命令 J0 @6 P Q! \4 L0 x- n 使用转到用户代码命令,可将程序跳转到用户代码。 ![]() - M/ q* |# M5 ~; q* N 完整版请查看:附件; d' K9 @7 u& D! ^( j; R |
STM32™ 在应用中编程通过 I²C 总线.pdf
下载935.43 KB, 下载次数: 1
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
STM32功能安全设计包,助力产品功能安全认证
基于STM32启动过程startup_xxxx.s文件经验分享
HRTIM 指南
ST 微控制器电磁兼容性 (EMC) 设计指南