2011 09 月文 ID 018520 1 1/25
PM0081
编程手册
STM32F40xxx STM32F41xxx
Flash 编程手册
前言
本编程手册介绍了 STM32F405xxSTM32F407xxSTM32F415xx STM32F417xx 微控制
Flash 的编程方法为方便起见本文档将上述产品统称为 STM32F40x STM32F41x
(除非另行声明)。
STM32F40x STM32F41x 嵌入式 Flash 可采用在线编程或在应用中编程两种方式。
在线编程 (ICP) 方式适用于更新 Flash 的所有内容,更新时使用 JTAGSWD 协议或自举程
序将用户应用程序加载到微控制器。ICP 可实现快速而高效的设计迭代,并且避免了不必要
的器件封装处理或插接。
ICP 方法相比,在应用中编程 (IAP) 可通过微控制器支持的任何通信接口(I/OUSB
CANUARTI
2
C SPI 等)将编程数据下载到存储器。使用 IAP 方式时,可以在应用程
序运行期间对 Flash 重新编程。但是,部分应用程序必须事先通过 ICP 方式编程到 Flash
Flash 接口根据 AHB 协议实施指令访问和数据访问。它将实施可加快 CPU 代码执行速度的
预取缓冲器,以及执行 Flash 操作(编程 / 擦除)所必需的逻辑。编程 / 擦除操作可在整个产
品电压范围内执行。读写保护和选项字节的设置也通过 FLASH 接口来操作。
www.st.com
目录 PM0081
2/25 文档 ID 018520 1
目录
1Flash 接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 主要特性 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4 读接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4.1 CPU 时钟频率与 Flash 读取时间之间的关系 . . . . . . . . . . . . . . . . . . . . . . 8
1.4.2 自适应实时存储器加速器 (ART Accelerator™) . . . . . . . . . . . . . . . . . . . . 9
1.5 擦除和编程操作 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.1 Flash 控制寄存器解锁 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.2 编程/擦除并行位数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.3 擦除 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.5.4 编程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.5.5 中断 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.6 选项字节 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.6.1 关于用户选项字节的说明 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.6.2 用户选项字节编程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.6.3 读保护 (RDP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.6.4 写保护 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.7 一次性可编程字节 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.8 Flash 接口寄存器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.8.1 Flash 访问控制寄存器 (FLASH_ACR) . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.8.2 Flash 密钥寄存器 (FLASH_KEYR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.8.3 Flash 选项字节密钥寄存器 (FLASH_OPTKEYR) . . . . . . . . . . . . . . . . . 19
1.8.4 Flash 状态寄存器 (FLASH_SR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.8.5 Flash 控制寄存器 (FLASH_CR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.8.6 Flash 选项控制寄存器 (FLASH_OPTCR) . . . . . . . . . . . . . . . . . . . . . . . 22
1.8.7 Flash 接口寄存器映射 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2 版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24