STM32F4单片机内部FLASH编程时间

前言

单片机内部的flash除了存储固件以外,经常将其分为多个区域,用来存储一些参数或存储OTA升级等待更新的固件,这时就会涉及单片机内部flash的编程和擦除操作。STM32同系列的单片机内部flash特性和扇区大小都不太一样,以下基于STM32F407VET6此型号进行简单介绍。

参考文档

STM32F4xx中文参考手册
STM32F407VET6数据手册

一、STM32F4的FLASH分区及扇区大小

不同型号的STM32F40xx/41xx,其 FLASH容量也有所不同,最小的只有 128K字节,最大的则达到了 1024K字节。 而STM32F407VET6的 FLASH容量为 512K字节, STM32F40xx/41xx的闪存模块组织如下:

  • STM32F4的闪存模块由:主存储器、系统存储器、 OTP区域和选项字节等 4部分组成。
  • 主存储器,该部分用来存放代码和数据常数(如const类型的数据)。分为 12个扇区,前 4个扇区为 16KB大小,然后扇区4是 64KB大小,扇区 5~11是 128K大小。
  • 不同容量的 STM32F4拥有的扇区数不一样,比如我们使用的 STM32F407VET6,则拥有 8个扇区。

二、FLASH的读取

STM32F4可通过内部的 I Code指令总线或 D Code数据总线访问内置闪存模块, 为了准确读取 Flash 数据,必须根据 CPU 时钟 (HCLK) 频率和器件电源电压在 Flash 存取控制寄存器 (FLASH_ACR) 中正确地设置等待周期数 (LATENCY)。当电源电压低于 2.1V 时 ,必须关闭预取缓冲器。 Flash 等待周期与 CPU时钟频率之间的对应关系如下:

 

  • 等待周期通过FLASH_ACR寄存器的 LATENCY[2:0]三个位设置。系统复位后, CPU时钟
    频率为内部 16M RC振荡器, LATENCY默认是 0,即 1个等待周期。
  • 供电电压,我们一般是3.3V,所以,在我们设置 168Mhz频率作为 CPU时钟之前,必须先设置 LATENCY为 5,否则
    FLASH读写可能出错,导致死机。

三、FLASH的编程位数

STM32F4闪存的编程位数可以通过 FLASH_CR的 PSIZE字段配置, PSIZE的设置必须和电源电压匹配,如下:

  • 由于我们开发板用的电压是3.3V,所以 PSIZE必须设置为 10,即32位并行位数。擦除或者编程,都必须以 32位为基础进行。

四、FLASH的擦除

  • STM32F4的 FLASH编程的时候,要先判断所写地址是否被擦除了(也就是其值必须是 0XFFFFFFFF),否则无法写入。
  • STM32F4的闪存擦除分为两种:扇区擦除和整片擦除。

五、FLASH内部编程时间

如下图所示:


在这里插入图片描述

可以看出不同扇区擦除时间也是不同的,字写入时间为16us,比如按字写入1024字节数据,只需要4ms,非常快。

由以上可总结出我们使用的 STM32F407VET6:

  • 字写入时间:
    典型值16us 最大值100us
  • 扇区擦除时间:
    16KB:典型值250ms 最大值500ms
    64KB:典型值550ms 最大值1100ms
    128KB:典型值1s 最大值2s

六、总结

由此可大致得出我们使用STM32F407VET6的FLASH时,FLASH的擦除和写入时间,具体实际时间可以通过测试得出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值