中国高校课件下载中心 》 教学资源 》 大学文库

《嵌入式应用开发》课程教学资源(文献资料)PM0042编程手册——STM32F10xxx闪存编程

文档信息
资源类别:文库
文档格式:PDF
文档页数:22
文件大小:464.42KB
团购合买:点击进入团购
内容简介
《嵌入式应用开发》课程教学资源(文献资料)PM0042编程手册——STM32F10xxx闪存编程
刷新页面文档预览

依据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参考手册

依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准信息块分为两个部分:系统存储器是用于存放在系统存储器自举模式下的启动程序,这个区域只保留给ST使用启动程序使用USART1串行接口实现对闪存存储器的编程;ST在生产线上对这个区域编程并锁定以防止用户擦写。关于使用这个启动程序的详细信息,请参阅AN2606·选择字节对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压由内部产生。闪存存储器有两种保护方式防止非法的访问(读、写、擦除):·页写入保护·读出保护详情请参考0节。在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。进行闪存编程操作时(写或擦除),必须打开内部的RC振荡器(HSI)闪存存储器可以用ICP或IAP方式编程。注:在低功耗模式下,所有闪存存储器的操作都被中止。详情请阅STM32F10xXX参考手册STSTM32F10xxx闪存编程页6/22

依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准 STM32F10xxx闪存编程 页6/22 信息块分为两个部分: z 系统存储器是用于存放在系统存储器自举模式下的启动程序,这个区域只保留给ST使用, 启动程序使用USART1串行接口实现对闪存存储器的编程;ST在生产线上对这个区域编程 并锁定以防止用户擦写。关于使用这个启动程序的详细信息,请参阅AN2606。 z 选择字节 对主存储器和信息块的写入由内嵌的闪存编程/擦除控制器(FPEC)管理;编程与擦除的高电压 由内部产生。 闪存存储器有两种保护方式防止非法的访问(读、写、擦除): z 页写入保护 z 读出保护 详情请参考0节。 在执行闪存写操作时,任何对闪存的读操作都会锁住总线,在写操作完成后读操作才能正确地 进行;既在进行写或擦除操作时,不能进行代码或数据的读取操作。 进行闪存编程操作时(写或擦除),必须打开内部的RC振荡器(HSI)。 闪存存储器可以用ICP或IAP方式编程。 注: 在低功耗模式下,所有闪存存储器的操作都被中止。详情请阅STM32F10xxx参考手册

依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准2读/编写STM32F10xXX内置闪存2.1简介本节介绍如何读和对STM32F10xXX的内置闪存编程。2.2读操作内置闪存模块可以在通用地址空间直接寻址,任何32位数据的读操作都能访问闪存模块的内容并得到相应的数据。读接口在闪存端包含一个读控制器,还包含一个AHB接口与CPU衔接。这个接口的主要工作是产生读闪存的控制信号并预取CPU要求的指令块,预取指令块仅用于在I-Code总线上的取指操作,数据常量是通过D-Code总线访问的。这两条总线的访问目标是相同的闪存模块,访问DCode将比预取指令优先级高。2.2.1取指令Cortex-M3在I-Code总线上取指令,在D-Code总线上取数据。预取指令块可以有效地提高对I-Code总线访问的效率。预取缓冲器预取缓冲器包含两个数据块,每个数据块有8个字节;预取指令(数据)块直接映像到闪存中,因为数据块的大小与闪存的宽度相同,所以读取预取指令块可以在一个读周期完成。设置预取缓冲器可以使CPU更快地执行,CPU读取一个字的同时下一个字已经在预取缓冲器中等候,即当代码跳转的边界为8字节的倍数时,闪存的加速比例为2。预取控制器预取控制器根据预取缓冲器中可用的空间决定是否访问闪存,预取缓冲器中有至少一块的空余空间时,预取控制器则启动一次读操作。清除闪存访问控制寄存器中的一个控制位能够关闭预取缓冲器。芯片复位后预取缓冲器处于开启状态。注意:当AHB时钟的预分频系数不为1"时,必须打开预取缓冲器(FLASH_ACR[4]=1)。如果在系统中没有高频率的时钟,即HCLK频率较低时,闪存的访问只需半个HCLK周期(半周期的闪存访问只能在时钟频率低于8MHz时进行,使用HSI或HSE并且关闭PLL时可得到这样的频率:在闪存访问控制寄存器中有一个控制位可以选择这种工作方式。注意:当使用了预取缓冲器和AHB时钟的预分频系数不为1'时,不能使用半周期访问方式。访问时间调节器为了维持读内存的控制信号,预取控制器的时钟周期与闪存访问时间的比例由闪内存访问控制器控制;这个值给出了能够正确地读取数据时,闪存控制信号所需的时钟周期数目:芯片复位后,该值为O,闪存访问仅为一个时钟周期。D-Code接口2.2.2D-Code接口包含CPU端简单的AHB接口和对闪存访问控制器的仲裁器提出访问请求的逻辑电路。D-Code的访问优先于预取指令的访问。这个接口使用预取缓冲器的访问时间调节器模块。2.2.3闪存访问控制器这个模块就是在I-Code上的指令预取请求和D-Code接口上读请求的仲裁器。D-Code接口的请求优先于I-Code的请求。S页7/22STM32F10xXx闪存编程

依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准 STM32F10xxx闪存编程 页7/22 2 读/编写STM32F10xxx内置闪存 2.1 简介 本节介绍如何读和对STM32F10xxx的内置闪存编程。 2.2 读操作 内置闪存模块可以在通用地址空间直接寻址,任何32位数据的读操作都能访问闪存模块的内容 并得到相应的数据。 读接口在闪存端包含一个读控制器,还包含一个AHB接口与CPU衔接。这个接口的主要工作是 产生读闪存的控制信号并预取CPU要求的指令块,预取指令块仅用于在I-Code总线上的取指操 作,数据常量是通过D-Code总线访问的。这两条总线的访问目标是相同的闪存模块,访问D￾Code将比预取指令优先级高。 2.2.1 取指令 Cortex-M3在I-Code总线上取指令,在D-Code总线上取数据。预取指令块可以有效地提高对I￾Code总线访问的效率。 预取缓冲器 预取缓冲器包含两个数据块,每个数据块有8个字节;预取指令(数据)块直接映像到闪存中,因 为数据块的大小与闪存的宽度相同,所以读取预取指令块可以在一个读周期完成。 设置预取缓冲器可以使CPU更快地执行,CPU读取一个字的同时下一个字已经在预取缓冲器中 等候,即当代码跳转的边界为8字节的倍数时,闪存的加速比例为2。 预取控制器 预取控制器根据预取缓冲器中可用的空间决定是否访问闪存,预取缓冲器中有至少一块的空余 空间时,预取控制器则启动一次读操作。 清除闪存访问控制寄存器中的一个控制位能够关闭预取缓冲器。芯片复位后预取缓冲器处于开 启状态。 注意: 当AHB时钟的预分频系数不为’1’时,必须打开预取缓冲器(FLASH_ACR[4]=1)。 如果在系统中没有高频率的时钟,即HCLK频率较低时,闪存的访问只需半个HCLK周期(半周 期的闪存访问只能在时钟频率低于8MHz时进行,使用HSI或HSE并且关闭PLL时可得到这样的 频率);在闪存访问控制寄存器中有一个控制位可以选择这种工作方式。 注意: 当使用了预取缓冲器和AHB时钟的预分频系数不为’1’时,不能使用半周期访问方式。 访问时间调节器 为了维持读闪存的控制信号,预取控制器的时钟周期与闪存访问时间的比例由闪存访问控制器 控制;这个值给出了能够正确地读取数据时,闪存控制信号所需的时钟周期数目;芯片复位 后,该值为’0’,闪存访问仅为一个时钟周期。 2.2.2 D-Code接口 D-Code接口包含CPU端简单的AHB接口和对闪存访问控制器的仲裁器提出访问请求的逻辑电 路。D-Code的访问优先于预取指令的访问。这个接口使用预取缓冲器的访问时间调节器模块。 2.2.3 闪存访问控制器 这个模块就是在I-Code上的指令预取请求和D-Code接口上读请求的仲裁器。 D-Code接口的请求优先于I-Code的请求

依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准2.3闪存编程和擦除控制器(FPEC)FPEC模块处理闪存的编程和擦除操作,它包括7个32位的寄存器:·FPEC键寄存器(FLASH_KEYR选择字节键寄存器(FLASH_OPTKEYR)·?闪存控制寄存器(FLASH_CR)e闪存状态寄存器(FLASH_SR).闪存地址寄存器(FLASH_AR).选择字节寄存器(FLASH_OBR).写保护寄存器(FLASH_WRPR)只要CPU不访问闪存,闪存操作不会延缓CPU的执行。键值2.3.1共有三个键值:·RDPRT键=0x000000A5KEY1=0x45670123。KEY2=0xCDEF89AB2.3.2解除闪存锁复位后,FPEC模块是被保护的,不能写入FLASH_CR寄存器;通过写入特定的序列到FLASHKEYR寄存器可以打开FPEC模块,这个特定的序列是在FLASHKEYR写入两个键值(KEY1和KEY2,见2.3.1节):错误的操作序列都会在下次复位前锁死FPEC模块和FLASH_CR寄存器。写入错误的键序列还会产生总线错误;总线错误发生在第一次写入的不是KEY1,或第一次写入的是KEY1但第二次写入的不是KEY2时:FPEC模块和FLASHCR寄存器可以由程序设置FLASHCR寄存器中的LOCK位锁住,这时可以通过在FLASHKEYR中写入正确的键值对FPEC解锁。2.3.3主闪存编程对主闪存编程每次可以写入16位。当FLASH_CR寄存器的PG位为'1"时,在一个闪存地址写入一个半字将启动一次编程;写入任何非半字的数据,FPEC都会产生总线错误。在编程过程中(BSY位为1),任何读写闪存的操作都会使CPU暂停,直到此次闪存编程结束。SISTM32F10xxx闪存编程页8/22

依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准 STM32F10xxx闪存编程 页8/22 2.3 闪存编程和擦除控制器(FPEC) FPEC模块处理闪存的编程和擦除操作,它包括7个32位的寄存器: z FPEC键寄存器(FLASH_KEYR) z 选择字节键寄存器(FLASH_OPTKEYR) z 闪存控制寄存器(FLASH_CR) z 闪存状态寄存器(FLASH_SR) z 闪存地址寄存器(FLASH_AR) z 选择字节寄存器(FLASH_OBR) z 写保护寄存器(FLASH_WRPR) 只要CPU不访问闪存,闪存操作不会延缓CPU的执行。 2.3.1 键值 共有三个键值: z RDPRT键 = 0x000000A5 z KEY1 = 0x45670123 z KEY2 = 0xCDEF89AB 2.3.2 解除闪存锁 复位后,FPEC模块是被保护的,不能写入FLASH_CR寄存器;通过写入特定的序列到 FLASH_KEYR寄存器可以打开FPEC模块,这个特定的序列是在FLASH_KEYR写入两个键值 (KEY1和KEY2,见2.3.1节);错误的操作序列都会在下次复位前锁死FPEC模块和FLASH_CR 寄存器。 写入错误的键序列还会产生总线错误;总线错误发生在第一次写入的不是KEY1,或第一次写入 的是KEY1但第二次写入的不是KEY2时;FPEC模块和FLASH_CR寄存器可以由程序设置 FLASH_CR寄存器中的LOCK位锁住,这时可以通过在FLASH_KEYR中写入正确的键值对 FPEC解锁。 2.3.3 主闪存编程 对主闪存编程每次可以写入16位。当FLASH_CR寄存器的PG位为’1’时,在一个闪存地址写入 一个半字将启动一次编程;写入任何非半字的数据,FPEC都会产生总线错误。在编程过程中 (BSY位为’1’),任何读写闪存的操作都会使CPU暂停,直到此次闪存编程结束

依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准图一编程过程读FLASH_CR的LOCK位1LOCK位=1执行解锁序列=0置FLASH_CR的PG位=1在指定的地址写入半字(16位)FLASH_SR的BSY位=1?=0读编程地址并检查写入的数据标准编程这种模式下CPU以标准的写半字的方式烧写闪存,FLASHCR寄存器的PG位必须置1。FPEC先读出指定地址的内容并检查它是否被擦除,如未被擦除则不执行编程并在FLASHSR寄存器的PGERR位提出警告(唯一的例外是当要烧写的数值是0x0000时,Ox0000可被正确烧入且PGERR位不被置位):如果指定的地址在FLASHWRPR中设定为写保护,则不执行编程并在FLASHSR寄存器的WRPRTERR位置'1提出警告。FLASH_SR寄存器的EOP为'1'时表示编程结束。标准的闪存编程顺序如下:检查FLASHSR寄存器的BSY位,以确认没有其他正在进行的编程操作;?.设置FLASH_CR寄存器的PG位为'1";?在指定的地址写入要编程的半字;?等待BSY位变为O';.读出写入的地址并验证数据。注意:当FLASHSR寄存器的BSY位为1时,不能对任何寄存器执行写操作。2.3.4闪存擦除闪存可以按页擦除,也可以整片擦除。页擦除闪存的任何一页都可以通过FPEC的页擦除功能擦除;擦除一页应遵守下述过程:.检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作;.设置FLASH_CR寄存器的PER位为'1;.用FLASH_AR寄存器选择要擦除的页;设置FLASHCR寄存器的STRT位为1?.等待BSY位变为0;.读出被擦除的页并做验证。STSTM32F10xxx闪存编程页9/22

依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准 STM32F10xxx闪存编程 页9/22 图一 编程过程 标准编程 这种模式下CPU以标准的写半字的方式烧写闪存,FLASH_CR寄存器的PG位必须置’1’。FPEC 先读出指定地址的内容并检查它是否被擦除,如未被擦除则不执行编程并在FLASH_SR寄存器 的PGERR位提出警告(唯一的例外是当要烧写的数值是0x0000时,0x0000可被正确烧入且 PGERR位不被置位);如果指定的地址在FLASH_WRPR中设定为写保护,则不执行编程并在 FLASH_SR寄存器的WRPRTERR位置’1’提出警告。FLASH_SR寄存器的EOP为’1’时表示编程 结束。 标准的闪存编程顺序如下: z 检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的编程操作; z 设置FLASH_CR寄存器的PG位为’1’; z 在指定的地址写入要编程的半字; z 等待BSY位变为’0’; z 读出写入的地址并验证数据。 注意: 当FLASH_SR寄存器的BSY位为’1’时,不能对任何寄存器执行写操作。 2.3.4 闪存擦除 闪存可以按页擦除,也可以整片擦除。 页擦除 闪存的任何一页都可以通过FPEC的页擦除功能擦除;擦除一页应遵守下述过程: z 检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作; z 设置FLASH_CR寄存器的PER位为’1’; z 用FLASH_AR寄存器选择要擦除的页; z 设置FLASH_CR寄存器的STRT位为’1’; z 等待BSY位变为’0’; z 读出被擦除的页并做验证。 = 1 执行解锁序列 = 0 = 1 读FLASH_CR的LOCK位 LOCK位=1 置FLASH_CR的PG位=1 在指定的地址写入半字(16位) FLASH_SR的 BSY位= 1? 读编程地址并检查写入的数据 = 0

依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准图二闪存页擦除过程读FLASH_CR的LOCK位LOCK位=1执行解锁过程0置FLASH_CR的PER=1:在FLASH_AR中选择要擦除的页置FLASH_CR的STRT=1FLASH_SR的BSY位=1?= 0读出并验证被擦除页的数据整片擦除可以用整片擦除功能擦除所有用户区的闪存,信息块不受此操作影响。建议使用下述过程:?检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作;?设置FLASH_CR寄存器的MER位为1:?设置FLASHCR寄存器的STRT位为'1:.等待BSY位变为'O;?读出所有页并做验证。图三闪存全擦除过程读FLASH_CR的LOCK位-LOCK位=执行解锁过程=0置FLASH_CR的MER=1:置FLASH_CR的STRT=1FLASH_SR的BSY位=1?=0读出并验证所有页的数据2.3.5选择字节编程对选择字节的编程与普通的用户地址不同。选择字节的数目只有8个字节(4个字节作为写保护1个字节作为读保护,1个字节为配置选项,2个字节存储用户数据)。对FPEC解锁后,必须分别写入KEY1和KEY2(见2.3.1节)到FLASHOPTKEYR寄存器,再设置FLASHCR寄存器的OPTWRE位为1',此时可以对选择字节进行编程:设置FLASH_CR寄存器的OPTPG位为'1后写入半字到指定的地址。FPEC先读出指定地址的选择字节内容并检查它是否已经被擦除,如未被擦除则不执行编程并在FLASHSR寄存器的WRPRTERR位提出警告。FLASHSR寄存器的EOP为'1'时表示编程结束。STSTM32F10xxx闪存编程页10/22

依据2008年9月英文第4版翻译。本译文仅供参考,如有翻译错误,请以英文原稿为准 STM32F10xxx闪存编程 页10/22 图二 闪存页擦除过程 整片擦除 可以用整片擦除功能擦除所有用户区的闪存,信息块不受此操作影响。建议使用下述过程: z 检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作; z 设置FLASH_CR寄存器的MER位为’1’; z 设置FLASH_CR寄存器的STRT位为’1’; z 等待BSY位变为’0’; z 读出所有页并做验证。 图三 闪存全擦除过程 2.3.5 选择字节编程 对选择字节的编程与普通的用户地址不同。选择字节的数目只有8个字节(4个字节作为写保护, 1个字节作为读保护,1个字节为配置选项,2个字节存储用户数据)。对FPEC解锁后,必须分 别写入KEY1和KEY2(见2.3.1节)到FLASH_OPTKEYR寄存器,再设置FLASH_CR寄存器的 OPTWRE位为’1’,此时可以对选择字节进行编程:设置FLASH_CR寄存器的OPTPG位为’1’后 写入半字到指定的地址。 FPEC先读出指定地址的选择字节内容并检查它是否已经被擦除,如未被擦除则不执行编程并 在FLASH_SR寄存器的WRPRTERR位提出警告。FLASH_SR寄存器的EOP为’1’时表示编程结 束。 = 1 执行解锁过程 = 0 = 1 读FLASH_CR的LOCK位 LOCK位=1 置FLASH_CR的MER = 1; 置FLASH_CR的STRT = 1 FLASH_SR的 BSY位= 1? 读出并验证所有页的数据 = 0 = 1 执行解锁过程 = 0 = 1 读FLASH_CR的LOCK位 LOCK位=1 置FLASH_CR的PER = 1; 在FLASH_AR中选择要擦除的页 置FLASH_CR的STRT = 1 FLASH_SR的 BSY位= 1? 读出并验证被擦除页的数据 = 0

共22页,试读已结束,阅读完整版请下载
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档