首页 关于
树枝想去撕裂天空 / 却只戳了几个微小的窟窿 / 它透出天外的光亮 / 人们把它叫做月亮和星星
目录

片上闪存接口(embeded flash interface)

片上闪存接口用于管理I-Code和D-Code总线访问片上闪存。 它提供了擦除和烧录Flash的功能,以及读写保护机制。 此外,对I-Code总线的指令预取(instruction prefetch)功能可以提高系统的性能。当电压低于2.1V时,将不能使用prefetch功能。

F407有最多1M的Flash存储空间,可以用来烧录程序。 这1M的空间又被分成了4个16K、1个64K和7个128K字节的sector。 支持sector和mass级擦写。 128位的读数据访问,可以byte(8位), half-word(16位), word(32位), double word(64位)的写访问。

1. FLASH访问等待周期

4. Flash接口寄存器

Reference Manual 在第3.9节中列举了FLASH接口寄存器的位定义和偏移地址。参考STM32官方库函数, 这里做了一些简化,定义如下的结构体用于访问FLASH的每个寄存器:

        typedef struct flash_regs {
            volatile uint32 ACR;      /* FLASH访问控制寄存器,开关各种访问加速功能,配置等待周期, offset: 0x00 */
            volatile uint32 KEYR;     /* FLASH密钥寄存器,用于对解锁对控制寄存器的访问,进而执行编程和擦写操作, offset: 0x04 */
            volatile uint32 OPTKEYR;  /* FLASH选项密钥寄存器,可以在用户配置扇区中进行编程和擦写操作, offset: 0x08 */
            volatile uint32 SR;       /* FLASH状态寄存器, 提供正在执行的编程和擦写操作的执行信息, offset: 0x0C */
            volatile uint32 CR;       /* FLASH控制寄存器, 配置和启动Flash操作, offset: 0x10 */
            volatile uint32 OPTCR;    /* FLASH选项控制寄存器, 修改用户选项字节, offset: 0x14 */
        } flash_regs_t; 

根据DataSheet的内存映射, FLASH寄存器被映射到了0x4002 3C00 - 0x4002 3FFF地址空间中,挂载在AHB1总线上。 因此,我们可以通过如下两个宏定义来访问RCC的各个寄存器。

        #define FLASH_BASE 0x40023C00
        #define FLASH ((flash_regs_t *)FLASH_BASE)

那么我们就可以通过如下的形式来访问FLASH的寄存器:

        FLASH->ACR
        FLASH->CR

5. 总结

参考书目

  1. STM32F405xx STM32F407xx Datasheet - production data.
  2. Reference Manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 Advanced ARM-based 32-bit MCUs(RM0090)



Copyright @ 高乙超. All Rights Reserved. 京ICP备16033081号-1