依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准STPM0042编程手册STM32F10xXx闪存编程简介本编程手册介绍了如何烧写STM32F101xX、STM32F102xx和STM32F103xx微控制器的闪存存储器。为方便起见,在本文中除特别说明外,统称它们为STM32F10xxX。STM32F10xxX内嵌的闪存存储器可以用于在线编程(ICP)或在程序中编程(IAP)烧写。在线编程(In-CircuitProgramming一ICP)方式用于更新闪存存储器的全部内容,它通过JTAG、SWD协议或系统加载程序(Bootloader)下载用户应用程序到微控制器中。ICP是一种快速有效的编程方法,消除了封装和管座的困扰。与ICP方式对应,在程序中编程(In-ApplicationProgramming-IAP)可以使用微控制器支持的任一种通信接口(如I/O端口、USB、CAN、UART、IC、SPI等)下载程序或数据到存储器中。IAP允许用户在程序运行时重新烧写闪存存储器中的内容。然而,IAP要求至少有一部分程序已经使用ICP烧到闪存存储器中。闪存接口是在AHB协议上实现了对指令和数据的访问,它通过对存储器的预取缓存,加快了存储器的访问:闪存接口还实现了在所有工作电压下对闪存编程和擦除所需的逻辑电路,这里还包括访问和写入保护以及选择字节的控制。STM32F10xXx闪存编程手册页1/22
依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准 STM32F10xxx闪存编程手册 页1/22 PM0042 编程手册 STM32F10xxx闪存编程 简介 本编程手册介绍了如何烧写STM32F101xx、STM32F102xx和STM32F103xx微控制器的闪存存 储器。为方便起见,在本文中除特别说明外,统称它们为STM32F10xxx。 STM32F10xxx内嵌的闪存存储器可以用于在线编程(ICP)或在程序中编程(IAP)烧写。 在线编程(In-Circuit Programming – ICP)方式用于更新闪存存储器的全部内容,它通过JTAG、 SWD协议或系统加载程序(Bootloader)下载用户应用程序到微控制器中。ICP是一种快速有效的 编程方法,消除了封装和管座的困扰。 与ICP方式对应,在程序中编程(In-Application Programming – IAP)可以使用微控制器支持的任 一种通信接口(如I/O端口、USB、CAN、UART、I 2 C、SPI等)下载程序或数据到存储器中。IAP 允许用户在程序运行时重新烧写闪存存储器中的内容。然而,IAP要求至少有一部分程序已经 使用ICP烧到闪存存储器中。 闪存接口是在AHB协议上实现了对指令和数据的访问,它通过对存储器的预取缓存,加快了存 储器的访问;闪存接口还实现了在所有工作电压下对闪存编程和擦除所需的逻辑电路,这里还 包括访问和写入保护以及选择字节的控制
依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准目录概述11.1特性1.2闪存模块组织2读/编写STM32F10xxx内置闪存2.1简介2.2读操作.2.2.1取指令.2.2.2D-Code接口2.2.3闪存访问控制器2.3闪存编程和擦除控制器(FPEC).2.3.1键值.2.3.2解除闪存锁82.3.3主闪存编程2.3.4闪存擦除O2.3.5选择字节编程102.4保护..122.4.1写保护122.4.2读保护.122.4.3选择字节块写保护...132.5选择字节说明133寄存器说明.153.1闪存访问控制寄存器(FLASH_ACR).153.2.16FPEC键寄存器(FLASH_KEYR)3.3...16闪存OPTKEY寄存器FLASH_OPTKEYR)3.4闪存状态寄存器(FLASH_SR)173.5..18闪存控制寄存器(FLASH_CR)3.6闪存地址寄存器(FLASH_AR)...193.7选择字节寄存器(FLASH_OBR)...193.8写保护寄存器(FLASH_WRPR).203.9闪存寄存器映像21STSTM32F10xxx闪存编程页2/22
依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准 STM32F10xxx闪存编程 页2/22 目录 1 概述.4 1.1 特性 .4 1.2 闪存模块组织.4 2 读/编写STM32F10xxx内置闪存.7 2.1 简介 .7 2.2 读操作.7 2.2.1 取指令.7 2.2.2 D-Code接口 .7 2.2.3 闪存访问控制器.7 2.3 闪存编程和擦除控制器(FPEC).8 2.3.1 键值.8 2.3.2 解除闪存锁.8 2.3.3 主闪存编程.8 2.3.4 闪存擦除 .9 2.3.5 选择字节编程 .10 2.4 保护 .12 2.4.1 写保护.12 2.4.2 读保护.12 2.4.3 选择字节块写保护.13 2.5 选择字节说明.13 3 寄存器说明 .15 3.1 闪存访问控制寄存器(FLASH_ACR).15 3.2 FPEC键寄存器(FLASH_KEYR).16 3.3 闪存OPTKEY寄存器(FLASH_OPTKEYR).16 3.4 闪存状态寄存器(FLASH_SR).17 3.5 闪存控制寄存器(FLASH_CR) .18 3.6 闪存地址寄存器(FLASH_AR).19 3.7 选择字节寄存器(FLASH_OBR).19 3.8 写保护寄存器(FLASH_WRPR) .20 3.9 闪存寄存器映像 .21
依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准术语下面列出了本文档中所用到的术语和缩写的简要说明:小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xX、STM32F102xx和STM32F103xx微控制器。中容量产品是指闪存存储器容量在64K至128K字节之间的STM32F101xX、STM32F102xXL和STM32F103xx微控制器。大容量产品是指闪存存储器容量在256K至512K字节之间的STM32F101xX和?STM32F103xX微控制器。.Cortex-M3内核集成了两个调试端口:JTAG调试接口(JTAG-DP)提供基于JTAG(JointTestActionGroup联合测试行动小组)协议的5线标准接口。SWD调试接口(SWD-DP)提供基于SWD(SerialWireDebug串行线调试)协议的2线标准接口。有关JTAG和SWD协议,请参考CortexM3TechnicalReferenceManual。字(Word):32位长的数据或指令?半字(HalfWord):16位长的数据或指令字节(Byte):8位长的数据或指令..FPEC(FLASHProgram/Erasecontroller闪存编程/擦除控制器):内嵌的FPEC负责对内置闪存的写操作。IAP(ln-ApplicationProgramming):IAP是在用户程序运行时对闪存微控制器中存储器重新编程。OICP(In-CircuitProgramming):ICP是在芯片安装到用户应用板上后,通过JTAG协议对闪存微控制器中存储器编程。I-Code:这是连接Cortex-M3核心的指令总线与闪存程序存储器接口的总线,指令预取是在这个总线上实现的。.D-Code:这是连接Cortex-M3核心的D-Code总线(常数和调试访问)与闪存数据存储器接口的总线。选择字节:存放在闪存中的产品配置位。.OBL:选择字节加载单元。?AHB:先进高性能总线。STSTM32F10xxx闪存编程页3/22
依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准 STM32F10xxx闪存编程 页3/22 术语 下面列出了本文档中所用到的术语和缩写的简要说明: z 小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx 和STM32F103xx微控制器。 z 中容量产品是指闪存存储器容量在64K至128K字节之间的STM32F101xx、STM32F102xx 和STM32F103xx微控制器。 z 大容量产品 是指闪存存储器容量在 256K 至 512K 字节之间的 STM32F101xx 和 STM32F103xx微控制器。 z Cortex-M3内核集成了两个调试端口: − JTAG调试接口(JTAG-DP)提供基于JTAG(Joint Test Action Group 联合测试行动 小组)协议的5线标准接口。 − SWD调试接口(SWD-DP)提供基于SWD(Serial Wire Debug 串行线调试)协议的2 线标准接口。 有关JTAG和SWD协议,请参考Cortex M3 Technical Reference Manual。 z 字(Word):32位长的数据或指令 z 半字(Half Word):16位长的数据或指令 z 字节(Byte):8位长的数据或指令 z FPEC(FLASH Program/Erase controller 闪存编程/擦除控制器):内嵌的FPEC负责对内置 闪存的写操作。 z IAP(In-Application Programming):IAP是在用户程序运行时对闪存微控制器中存储器重新 编程。 z ICP(In-Circuit Programming):ICP是在芯片安装到用户应用板上后,通过JTAG协议对闪 存微控制器中存储器编程。 z I-Code:这是连接Cortex-M3核心的指令总线与闪存程序存储器接口的总线,指令预取是 在这个总线上实现的。 z D-Code:这是连接Cortex-M3核心的D-Code总线(常数和调试访问)与闪存数据存储器接口 的总线。 z 选择字节:存放在闪存中的产品配置位。 z OBL:选择字节加载单元。 z AHB:先进高性能总线
依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准1概述1.1特性多达512K字节闪存.?存储器配置:主存储块:小容量产品:4K×64位中容量产品:16Kx64位大容量产品:64Kx64位信息块:258x64位闪存接口的特性:带预取缓冲器的读接口(2x64位)选择字节加载?.闪存编程/擦除操作读出/写入保护.低功耗模式1.2闪存模块组织按照不同容量,存储器组织成32个1K字节/页(小容量)、128个1K字节/页(中容量)、256个2K字节/页(大容量的主存储器块和一个信息块,见表1、:表1闪存模块组织(小容量产品)块名称地址范围长度(字节)页01K0x08000000-0x080003FF页11K0x080004000-0x080007FF1K页20x08000800-0x08000BFF页31K0x08000C001-0x08000FFF主存储器页41K0x08001000-0x080013FF.:...1K页310x08007C00-0x0800FFFF2K启动程序代码Ox1FFFF000-Ox1FFFF7FF信息块16用户选择字节0x1FFFF8000-0x1FFFF80F4FLASH_ACR0x40022000-0x400220034FLASH KEYR0x40022004-0x400220074FLASH_OPTKEYR0x400220083-0x4002200B4FLASH_SR0x4002200CC-0x4002200F闪存存储器4FLASH_CR0x40022010-0x40022013接口寄存器4FLASH_AR0x400220144-0x40022017保留40x40022018-0x4002201B4FLASH_OBR0x4002201CC-0x4002201F4FLASH_WRPR0x400220200-0x40022023STSTM32F10xxx闪存编程页4/22
依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准 STM32F10xxx闪存编程 页4/22 1 概述 1.1 特性 z 多达512K字节闪存 z 存储器配置: − 主存储块: 小容量产品:4K x 64位 中容量产品:16K x 64位 大容量产品:64K x 64位 − 信息块:258 x 64位 闪存接口的特性: z 带预取缓冲器的读接口(2x64位) z 选择字节加载 z 闪存编程/擦除操作 z 读出/写入保护 z 低功耗模式 1.2 闪存模块组织 按照不同容量,存储器组织成32个1K字节/页(小容量)、128个1K字节/页(中容量)、256个2K字 节/页(大容量)的主存储器块和一个信息块,见表1、: 表1 闪存模块组织(小容量产品) 块 名称 地址范围 长度(字节) 页0 0x0800 0000 – 0x0800 03FF 1K 页1 0x0800 0400 – 0x0800 07FF 1K 页2 0x0800 0800 – 0x0800 0BFF 1K 页3 0x0800 0C00 – 0x0800 0FFF 1K 页4 0x0800 1000 – 0x0800 13FF 1K . . . . . . . . . 主存储器 页31 0x0800 7C00 – 0x0800 FFFF 1K 启动程序代码 0x1FFF F000 – 0x1FFF F7FF 2K 信息块 用户选择字节 0x1FFF F800 – 0x1FFF F80F 16 FLASH_ACR 0x4002 2000 – 0x4002 2003 4 FLASH_KEYR 0x4002 2004 – 0x4002 2007 4 FLASH_OPTKEYR 0x4002 2008 – 0x4002 200B 4 FLASH_SR 0x4002 200C – 0x4002 200F 4 FLASH_CR 0x4002 2010 – 0x4002 2013 4 FLASH_AR 0x4002 2014 – 0x4002 2017 4 保留 0x4002 2018 – 0x4002 201B 4 FLASH_OBR 0x4002 201C – 0x4002 201F 4 闪存存储器 接口寄存器 FLASH_WRPR 0x4002 2020 – 0x4002 2023 4
依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准表2闪存模块组织(中容量产品)块名称长度(字节)地址范围页01K0x08000000-0x080003FF页11K0x08000400-0x080007FF页21K0x08000800-0x08000BFF页31K0x08000C000-0x08000FFF主存储器页41K0x080010000-0x080013FF...1K页1270x0801FC00-0x0801FFFF2K启动程序代码Ox1FFFF000Ox1FFFF7FF信息块16用户选择字节0x1FFFF800Ox1FFFF80F-4FLASH_ACR0x40022000一0x400220034FLASHKEYR0x400220040x40022007一4FLASHOPTKEYR0x40022008一0x4002200B4FLASH_SR0x4002200C0x4002200F-闪存存储器4FLASH_CR0x40022010-0x40022013接口寄存器4FLASH_AR0x40022014-0x40022017保留40x40022018-0x4002201B4FLASH_OBR0x4002201C-0x4002201F4FLASH_WRPR0x400220200-0x40022023表3闪存模块组织(大容量产品)块名称地址范围长度(字节)页02K0x08000000-0x080007FF页12K0x08000800-0x08000FFF页22K0x080010000-0x080117FF页32K0x08001800-0x0801FFFF主存储器::..2K页2550x0807F800-0x0807FFFF启动程序代码2KOx1FFFF000-0x1FFFF7FF信息块用户选择字节160x1FFFF8000-0x1FFFF80F4FLASHACR0x400220000-0x400220034FLASH_KEYR0x40022004-0x400220074FLASH_OPTKEYR0x40022008-0x4002200B4FLASH_SR0x4002200C-0x4002200F闪存存储器4FLASH_CR0x400220100x40022013-接口寄存器4FLASH_AR0x40022014一0x40022017保留40x40022018-0x4002201B4FLASH_OBR0x4002201CC-0x4002201F4FLASH_WRPR0x40022020-0x40022023闪存存储器被组织成32位宽的存储器单元,可以存放代码和数据常数。每一个STM32F10xXx微控制器的闪存模块都有一个特定的启始地址,有关的启始地址请参考STM32F10xxX参考手册。SSTM32F10xxx闪存编程页5/22
依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准 STM32F10xxx闪存编程 页5/22 表2 闪存模块组织(中容量产品) 块 名称 地址范围 长度(字节) 页0 0x0800 0000 – 0x0800 03FF 1K 页1 0x0800 0400 – 0x0800 07FF 1K 页2 0x0800 0800 – 0x0800 0BFF 1K 页3 0x0800 0C00 – 0x0800 0FFF 1K 页4 0x0800 1000 – 0x0800 13FF 1K . . . . . . . . . 主存储器 页127 0x0801 FC00 – 0x0801 FFFF 1K 启动程序代码 0x1FFF F000 – 0x1FFF F7FF 2K 信息块 用户选择字节 0x1FFF F800 – 0x1FFF F80F 16 FLASH_ACR 0x4002 2000 – 0x4002 2003 4 FLASH_KEYR 0x4002 2004 – 0x4002 2007 4 FLASH_OPTKEYR 0x4002 2008 – 0x4002 200B 4 FLASH_SR 0x4002 200C – 0x4002 200F 4 FLASH_CR 0x4002 2010 – 0x4002 2013 4 FLASH_AR 0x4002 2014 – 0x4002 2017 4 保留 0x4002 2018 – 0x4002 201B 4 FLASH_OBR 0x4002 201C – 0x4002 201F 4 闪存存储器 接口寄存器 FLASH_WRPR 0x4002 2020 – 0x4002 2023 4 表3 闪存模块组织(大容量产品) 块 名称 地址范围 长度(字节) 页0 0x0800 0000 – 0x0800 07FF 2K 页1 0x0800 0800 – 0x0800 0FFF 2K 页2 0x0800 1000 – 0x0801 17FF 2K 页3 0x0800 1800 – 0x0801 FFFF 2K . . . . . . . . . 主存储器 页255 0x0807 F800 – 0x0807 FFFF 2K 启动程序代码 0x1FFF F000 – 0x1FFF F7FF 2K 信息块 用户选择字节 0x1FFF F800 – 0x1FFF F80F 16 FLASH_ACR 0x4002 2000 – 0x4002 2003 4 FLASH_KEYR 0x4002 2004 – 0x4002 2007 4 FLASH_OPTKEYR 0x4002 2008 – 0x4002 200B 4 FLASH_SR 0x4002 200C – 0x4002 200F 4 FLASH_CR 0x4002 2010 – 0x4002 2013 4 FLASH_AR 0x4002 2014 – 0x4002 2017 4 保留 0x4002 2018 – 0x4002 201B 4 FLASH_OBR 0x4002 201C – 0x4002 201F 4 闪存存储器 接口寄存器 FLASH_WRPR 0x4002 2020 – 0x4002 2023 4 闪存存储器被组织成32位宽的存储器单元,可以存放代码和数据常数。每一个STM32F10xxx微 控制器的闪存模块都有一个特定的启始地址,有关的启始地址请参考STM32F10xxx参考手册