STMCU小助手
发布时间:2022-12-5 23:00
|
简介 对于大多数基于 Flash 的系统而言,在最终产品安装之后,能够对固件进行更新,这一点非常重要。这称为在应用中编程 (IAP)。此应用笔记的目的就是为创建 IAP 应用程序提供通用指南。 STM32F10x 微控制器能够运行用户指定的固件,从而执行微控制器内置 Flash 的 IAP。借助这一特性,在重新编程过程中可以使用任意类型的通信协议(如 CAN、USART、USB、SPI 和 I2C 等)。6 s: x1 a/ L1 J) R9 X( B" `6 h 本应用笔记介绍如何使用 STM32F10x 的 I2C 外设执行在应用中编程。第一步,将 Aardvark工具用作主机,向 STM32F10x 发送 IAP 命令。第二步,将另一 STM32F10x 微控制器用作主机,且该微控制器桥接 PC 与目标器件(USB/I2C 桥接器)。4 b8 H L6 n6 r- N4 B9 [- t STM32F10x 用作 I2C 存储器,可通过 I2C/接口对其进行编程、擦除和读取。 0 L! \0 A6 Z6 H K7 | 下面列出了开发过程中使用的 Aardvark 主机适配器版本:/ ^ g" |# c5 M( B h ● 固件:Aardvark I2C/SPI Control Center v3.52 -2009.0130 ● 硬件:Aardvark I2C/SPI v3.0 ) {; h- D6 U p, _7 R 1 IAP 概述0 F+ u: }. M# ?7 E3 W5 s: R 1.1 原理 可以使用开发工具通过 JTAG 或 SWD 接口,把 IAP 驱动程序烧写到 Flash 的起始地址。此驱动程序使用 I2C,将文件从主机载入 STM32F10x 内部 Flash,然后执行该文件。' z2 K: g; D" ]) R% D( l; g0 T3 l 1.2 用户程序应满足的条件; D2 T! E3 X$ f+ b# t 将 IAP 应用程序加载到从 Flash 基址开始到 0x0800 0fff 的一段区域。因此,必须将用户应用程序加载到 0x0800 1000 地址以上的 Flash 高地址区域。# \# b# }! e6 k+ }2 A 0 \- l) s. G( E) C- J# S; O ) b8 O2 G2 N: V+ w# f( t
; a6 {: p1 E7 x, L% J 1.3 全局流程图 - G4 A" R, e5 v2 h' @0 I
/ p* ^$ d7 Y+ W' _9 j- Z) G 使用连接到按钮的引脚来选择跳转到用户应用程序还是执行用于重新编程的 IAP:1 R' _+ K& z5 M5 A4 }0 Y ● 复位时,按下按钮将执行 IAP ● 否则,跳转到用户程序/ M w' N) L0 U 6 ?& I s# M1 m! j% d1 G. n' l 1.4 IAP 命令9 H3 D+ L& n6 ~# G% U 1.4.1 读命令7 T4 e X$ @3 I3 W/ W 读命令用于从 STM32 的 Flash 中读取数据,并且可以从用户存储空间的任意 Flash 地址开始读取。 0 b s3 a R& u0 ~* G
操作码的值为 OPC_READ 时,执行读命令。目标器件认为操作码之后由主机主器件发送的前四个字节为要从中读取数据的 Flash 地址。紧跟 Flash 地址之后的两个字节表示要读取的数据的大小(字节)。通过 SDA 线将 Flash 中的内容缓存到 I2C1_buffer_Tx,并按字节发送。 1.4.2 写命令! b4 o2 o. d& W+ D4 y* T9 ` 写命令用于向 STM32 Flash 写入数据,并且可以从用户存储空间的任意 Flash 地址开始写入。, w2 F' P' s9 g$ b+ z # ^- {1 j' y% {/ r; \# @4 G5 Y# p ) P }0 [+ t6 o$ x2 P
图 4. 写命令流程图3 @! t1 l7 i ?" r5 }1 W1 F 操作码的值为 OPC_WREN 时,执行写命令。目标器件认为操作码之后由主机主器件发送的前四个字节为要写入数据的 Flash 地址。紧跟在 Flash 地址之后的两个字节表示要写入的数据的大小(字节)。将从主机主器件接收的 N 个字节缓存到 I2C1 Buffer Rx。写入数据前,要擦除相应 Flash 页。2 Y8 O0 B$ J+ t1 x 1.4.3 擦除页命令/ e8 D' n- P; t$ d( w 擦除页命令用于擦除用户存储空间中从任意 Flash 基址开始的页。对于中容量器件,可擦除页的数量在 0x0001 与 0x007B 之间(1 到 124 页);对于大容量器件,可擦除页的数量在0x0001 与 0x00FE 之间(1 到 254 页)。 5 f, S3 a- }- m: v* L# p; H . v8 d/ P7 `, d* ?# z; J6 M/ [
! g' ?, q. x. i4 Z% ]7 p 操作码的值为 OPC_ERPG 时,执行擦除页命令。目标器件认为操作码之后由主机主器件发送的前四个字节为 Flash 地址。紧跟在 Flash 地址之后的两个字节表示要擦除的页数。收到该地址和页数后,目标器件 STM32 将擦除相应的 Flash 页。' J- {0 F7 ^1 w( S' k8 J% F# n 0 L# \+ |2 f- u8 X8 b 1.4.4 擦除用户存储空间命令 擦除用户存储空间命令可擦除用户存储空间中从 Flash 地址 0x0800 1000 开始即以上的所有页。, [) y% d" y* X- x3 S6 t 2 S3 z# @$ m- z1 } " u3 ? t. R: k# t- r# x6 ?
& f! \& R* O& I% V 操作码的值为 OPC_ERUSM 时,执行擦除用户存储空间命令。顾名思义,此命令将擦除从Flash 基址 0x0800 1000(用户空间起始地址)及以上的所有页的内容。 1.4.5 转到用户代码命令' s2 ?) l2 b( \/ T6 Y 使用转到用户代码命令,可将程序跳转到用户代码。: Z. C; k, y/ e& Z+ Z 2 A* b: z& I3 V' ]7 Z: g
完整版请查看:附件- q' `7 s0 P: q7 \# ]+ K. m! }/ L $ B8 ~, I. K+ B! S+ P! p |
STM32™ 在应用中编程通过 I²C 总线.pdf
下载935.43 KB, 下载次数: 2
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版