本译文仅供参考,如有翻译错误,请以英文原稿为准
STM32F10x闪存编程
页1/23
PM0042
编程手册
编程手册编程手册
编程手册
STM32F10x闪存编程
闪存编程闪存编程
闪存编程
简介
简介简介
简介
本编程手册介绍了如何烧写STM32F10x微控制器的闪存存储器。
STM32F10x内嵌的闪存存储器可以用在线编程(ICP)或在程序中编程(IAP)烧写。
在线编程(In-Circuit Programming – ICP)方式用于更新闪存存储器的全部内容,它通过JTAG或
SWD协议下载用户应用程序到微控制器中。ICP是一种快速有效的流程,消除了封装和管座的
困扰。
与ICP方式对应,在程序中编程(In-Application Programming – IAP)可以使用微控制器支持的任一
种通信接口(如I/O端口、USB、CAN、UART等)下载程序或数据到存储器中。IAP允许你在程序
运行时重新烧写闪存存储器中的内容。然而,IAP要求至少有一部分程序已经用ICP烧到某个闪
存块中。
本文的内容适用于STM32F101和STM32F103系列。
闪存接口是在AHB协议上实现了对指令和数据的访问,通过对存储器的分区和预取缓存的实
现,加快了存储器的访问;闪存接口还实现了闪存编程和擦除所需的逻辑电路,这里还包括访
问和写入保护以及选择字节的控制。
本译文仅供参考,如有翻译错误,请以英文原稿为准
STM32F10x闪存编程
页2/23
目录
目录目录
目录
1 概述 ................................................................................................................................................................... 4
1.1 特性 ....................................................................................................................................................... 4
1.2 闪存模块组织 ....................................................................................................................................... 4
2 读/编写STM32F10x内置闪存.......................................................................................................................... 6
2.1 简介 ....................................................................................................................................................... 6
2.2 读操作 ................................................................................................................................................... 6
2.2.1 取指令 ....................................................................................................................................... 6
2.2.2 D-Code接口............................................................................................................................... 6
2.2.3 闪存访问控制器 ....................................................................................................................... 6
2.2.4 信息模块访问 ........................................................................................................................... 7
2.3 闪存编程和擦除控制器(FPEC) ........................................................................................................... 7
2.3.1 键值 ........................................................................................................................................... 7
2.3.2 解除闪存锁 ............................................................................................................................... 7
2.3.3 闪存编程 ................................................................................................................................... 7
2.3.4 信息块的编程 ........................................................................................................................... 8
2.3.5 闪存擦除 ................................................................................................................................... 9
2.4 保护 ..................................................................................................................................................... 11
2.4.1 读保护 ..................................................................................................................................... 11
2.4.2 写保护 ..................................................................................................................................... 11
2.4.3 信息块保护 ............................................................................................................................. 12
2.5 选择字节加载 ..................................................................................................................................... 12
2.6 低功耗管理 ......................................................................................................................................... 13
3 寄存器说明 ..................................................................................................................................................... 14
3.1 闪存访问控制寄存器(FALSH_CR)................................................................................................... 14
3.2 FPEC键寄存器(FLASH_KEYR)........................................................................................................ 15
3.3 闪存OPTKEY寄存器(FLASH_OPTKEYR)...................................................................................... 15
3.4 闪存状态寄存器(FLASH_SR) ........................................................................................................... 16
3.5 闪存控制寄存器(FLASH_CR)........................................................................................................... 17
3.6 闪存地址寄存器(FLASH_AR)........................................................................................................... 18
3.7 选择字节寄存器(FLASH_OBR)........................................................................................................ 19
3.8 写保护寄存器(FLASH_WRPR)......................................................................................................... 20
3.9 闪存寄存器映像 ................................................................................................................................. 21
4 版本历史 ......................................................................................................................................................... 22
本译文仅供参考,如有翻译错误,请以英文原稿为准
STM32F10x闪存编程
页3/23
术语
术语术语
术语
下面列出了本文档中所用到的术语和缩写的简要说明:
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。
选择字节:存放在闪存中的产品配置位。
字(Word):32位长的数据或指令
半字(Half Word):16位长的数据或指令
字节(Byte):8位长的数据或指令
FPEC(FLASH Program/Erase controller 闪存编程/擦除控制器):对内置闪存的写操作是由一
个内嵌的FPEC管理的。
IAP(In-Application Programming):IAP是在用户程序运行时对闪存微控制器中存储器重新
编程的一种能力。
ICP(In-Circuit Programming):ICP是在芯片安装在用户应用板上后通过JTAG协议对闪存微
控制器中存储器编程的一种能力。
I-Code:这是连接Cortex-M3核心的指令总线与闪存程序存储器接口的总线,指令预取是在
这个总线上实现的。
D-Code:这是连接Cortex-M3核心的D-Code总线(常数和调试访问)与闪存数据存储器接口
的总线。
SIF:用户选择字节的小信息块(详见图4)。
AHB:先进高性能总线。
本译文仅供参考,如有翻译错误,请以英文原稿为准
STM32F10x闪存编程
页4/23
1 概述
概述概述
概述
1.1 特性
特性特性
特性
128K字节闪存
擦写周期:1000次
存储器配置:
− 主存储块:16K x 64位
− 信息块:320 x 64位
闪存接口的特性:
带预取缓冲器的读接口(2x64位)
选择字节加载
闪存编程/擦除操作
读出/写入保护
1.2 闪存
闪存闪存
闪存模块组织
模块组织模块组织
模块组织
存储器组织成主存储器块和信息块;主存储器块包含128页,每页1K字节;信息块包括2页(2K
字节和0.5K字节);如表一:
表一
表一表一
表一
闪存
闪存闪存
闪存模块组织
模块组织模块组织
模块组织
块
块块
块 名称
名称名称
名称 地址范围
地址范围地址范围
地址范围 长度
长度长度
长度(字节
字节字节
字节)
页0
0x0800 0000 – 0x0800 03FF
页1
0x0800 0400 – 0x0800 07FF
页2
0x0800 0800 – 0x0800 0BFF
页3
0x0800 0C00 – 0x0800 0FFF
4 x 1K
页4~7
0x0800 1000 – 0x0800 1FFF
4 x 1K
页8~11
0x0800 2000 – 0x0800 2FFF
4 x 1K
.
.
.
.
.
.
.
.
.
主存储器
页124~127
0x0801 F000 – 0x0801 FFFF
4 x 1K
启动程序代码
0x1FFF F000 – 0x1FFF F7FF
2K
信息块
用户选择字节
0x1FFF F800 – 0x1FFF F9FF
512
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
闪存寄存器
保留
0x4002 2024 – 0x4002 2087
100
闪存存储器被组织成32位宽的存储器单元,可以存放代码和数据常数。每一个STM32F10x微控
制器的闪存模块都有一个特定的启始地址,有关的启始地址请参考STM32F10x
参考手册
。
系统存储器是用于存放在系统存储器自举模式下的启动程序,这个区域只保留给ST使用;ST在
生产线上对这个区域编程并锁定以防止用户擦写。
本译文仅供参考,如有翻译错误,请以英文原稿为准
STM32F10x闪存编程
页5/23
对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由
内部产生。
闪存存储器有两种保护方式防止非法的访问(读、写、擦除):
页写入保护
读出保护
详情请参考2.4节。
在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地
进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。
进行闪存编程操作时(写或擦除),必须打开内部的RC振荡器(HSI)。
闪存存储器可以用ICP或IAP方式编程。