赞
踩
要从FLASH中正确读取数据,必须根据CPU时钟(HCLK)频率和电源电压值,正确设置FLASH访问控制寄存器(FLASH_ACR)中等待状态数(LATENCY)。 当电源电压低于2.1 V时,必须禁用预取缓冲器。等待状态与CPU时钟频率之间的对应关系在见下表。
MCU复位后,时钟频率为16 MHz,并在FLASH_ACR寄存器中配置了0个等待状态(WS)。用户需要使用软件来调整通过CPU访问闪存所需的等待状态数。
Unlocking the Flash control register
复位后,不允许在闪存控制寄存器(FLASH_CR)中进行写操作,以保护闪存免于因电干扰等可能引起的不良操作。 以下序列用于解锁该寄存器:
任何错误的顺序都会返回总线错误并锁定FLASH CR寄存器, 直到下一次复位为止 。通过将FLASH_CR寄存器中的LOCK位置1,可以通过软件再次锁定FLASH CR寄存器。
注意:当FLASH_SR寄存器中的BSY位置1时,无法在写模式下访问FLASH_CR寄存器。 尝试将BSY位置1进行写操作将导致AHB总线停顿,直到BSY位被清除为止。
Program/erase parallelism
编程和擦除的数据位宽是是通过FLASH_CR寄存器中的PSIZE字段配置的。 它表示每次对闪存进行写操作时要编程的字节数。 PSIZE受电源电压以及是否使用外部VPP电源限制。 因此,在进行任何编程/擦除操作之前,必须在FLASH_CR寄存器中对其进行正确配置。 闪存擦除操作只能按扇区,存储区或整个闪存(批量擦除)执行。 擦除时间取决于PSIZE编程值。 正确的PSIZE值见表12。
注意:
Sector Erase
Bank erase
Mass Erase
注意:
Standard programming
注意:
Programming errors
Programming and caches
如果闪存写入访问涉及数据缓存中的某些数据,则闪存写入访问会修改闪存中的数据和缓存中的数据。如果闪存中的擦除操作也涉及数据或指令缓存中的数据,则可以 必须确保在代码执行期间访问这些数据之前将其重写。 如果不能安全地完成此操作,建议通过将FLASH_CR寄存器中的DCRST和ICRST位置1来刷新高速缓存。注:仅当禁用I / D高速缓存(I / DCEN = 0)时,才应刷新I / D高速缓存。
Read-While-Write (RWW)
在STM32F42xxx和STM32F43xxx器件中,闪存分为两个存储区,允许同时读写操作。 此功能允许从一个存储体执行读取操作,同时对另一存储体执行擦除或编程操作。 注意:不允许边写边写操作。 例如,对一个存储体进行编程时不可对另一存储体执行擦除操作。
Read from bank 1 while erasing bank 2
在从bank1执行程序代码时,可以在bank2上执行擦除操作(反之亦然)。 请按照以下步骤操作:
Read from bank 1 while programming bank 2
从bank1执行程序代码(通过I代码总线)时,可以对bank2执行编程操作(反之亦然)。 请按照以下步骤操作:
Interrupts
选项字节由最终用户根据应用程序来配置。 表14显示了这些字节在用户配置扇区内的组织。
要对该扇区执行任何操作,必须清除Flash选项控制寄存器(FLASH_OPTCR)中的选项锁定位(OPTLOCK)。 要允许清除该位,必须执行以下顺序:
Modifying user option bytes on STM32F42xxx and STM32F43xxx
bank 1和bank 2的用户选项字节不能单独修改, 它们必须同时更新。 要修改用户选项字节值,需遵循以下顺序:
1.通过检查FLASH_SR寄存器中的BSY位,确保没有正在进行的闪存操作。
2.将bank2选项字节值写入 FLASH_OPTCR1 寄存器
3.将bank 1选项字节值写入 FLASH_OPTCR 寄存器。
4.设置FLASH_OPTCR寄存器中的选项起始位(OPTSTRT)
5.等待BSY位被清除
注意:通过首先擦除用户配置扇区(存储区1和2),然后使用FLASH_OPTCR和FLASH_OPTCR1寄存器中包含的值对所有选项字节进行编程,将自动修改选项字节的值。
Write protections
最多可以保护24个用户扇区免受不必要的意外写操作。当FLASH_OPTCR或FLASH_OPTCR1寄存器中的非写保护nWRPi位(0≤i≤11)为低时,无法擦除或编程相应的扇区。因此,如果其中一个扇区被写保护,则无法执行MASS擦除。如果尝试对FLASH的写保护部分进行擦除/编程操作(该扇区受写保护位保护,OTP部分被锁定或对于永远无法像ICP一样写入的闪存,则在FLASH_SR寄存器中设置了写保护错误标志(WRPERR)。在STM32F42xxx和STM32F43xxx器件上,当设置了PCROP模式时,nWRPi的有效电平为高,并且当nWRPi为高时,相应的扇区i被写保护。 PCROP扇区是自动写保护的。
注意:选择FLASH读保护级别(RDP级别= 1)时,如果连接了CPU调试功能(JTAG或单线)或正在从RAM执行引导代码,则无法编程或擦除闪存扇区i,即使nWRPi = 1。
如果对闪存的写保护区域执行了擦除/编程操作,则FLASH_SR寄存器中的写保护错误标志(WRPERR)被置位;如果请求擦除操作,则在以下情况下WRPERR位置1:
如果请求编程操作,则在以下情况下将WRPERR位置1:
Proprietary code readout protection (PCROP)
专有的读取保护(PCROP)仅在STM32F42xxx和STM32F43xxx器件上可用。 使用专有的读取保护(PCROP),可以保护闪存用户扇区(0至23)免受D总线读取访问。 通过FLASH_OPTCR寄存器中的SPRMOD选项位来选择PCROP保护。
当扇区被读出保护(激活PCROP模式)时,只能通过Flash接口上的ICODE总线对其进行访问以获取代码。
仅当RDP级别从1更改为0时,才可以禁用SPRMOD和/或对PCROPed用户扇区进行保护。
如果不遵守此条件,则取消用户选项字节修改,并设置写错误WRPERR标志。
允许修改用户选项字节(BOR_LEV,RST_STDBY,…),因为没有激活的nWRPi位被复位并且SPRMOD保持激活状态。
注意:当PCROP模式有效(SPRMOD = 1)时,nWRPi位的有效值反转。如果SPRMOD = 1并且nWRPi = 1,则bank1的用户扇区i(bank2类似)受到读/写保护(PCROP)。
.
.
flash access control register (FLASH_ACR)
闪存访问控制寄存器用于启用/禁用加速功能,并根据CPU频率控制闪存访问时间。因为主频较高,所以LANTENCY多了1bit,从7个CPU周期等待时间延长到15个CPU周期等待时间。
.
.
Flash key registe(FLASH_KEYR)
闪存密钥寄存器用于允许访问闪存控制寄存器,因此可以进行编程和擦除操作。
.
.
Flash option key register(FLASH_OPTKEYR)
Flash选项密钥寄存器用于允许用户配置扇区中的编程和擦除操作。
.
Flash status register (FLASH_SR) for STM32F42xxx and STM32F43xxx
闪存状态寄存器提供有关正在进行的编程和擦除操作的信息。
.
Flash control register (FLASH_CR) for STM32F42xxx and STM32F43xxx
闪存控制寄存器用于配置和启动闪存操作。
.
.
Flash option control register (FLASH_OPTCR)
FLASH_OPTCR寄存器用于修改用户选项字节。
.
.
**Flash option control register (FLASH_OPTCR1)for STM32F42xxx and STM32F43xxx **
该寄存器仅在STM32F42xxx和TM32F43xxx上可用。FLASH_OPTCR1寄存器用于修改bank2的用户选项字节。
PCROP 为Proprietary code readout protection 的缩写,也就是说这是一个专有代码读出保护的功能。与RDP 对整片Flash读保护不同的是,它只是针对Flash 的某些特定区域进行代码的读写保护。所以它可以被用来保护一些IP代码,方便进行二次开发。它存在于多个STM32系列中,比如STM32F4,STM32L4,STM32F7等。
Write protectionon sector i和PCROP protection on sector i不同时存在,通过FLASH_OPTCR的SPRMOD位进行选择,置0为选择Write protectionon ,置1为选择PCROP protection 。该位影响FLASH_OPTCR和FLASH_OPTCR1两个寄存器的第16-27位配置的0-11扇区保护方式。
.
.
FLASH寄存器map和复位值
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。