STM32F103R6之存储器及启动配置

存储器组织

Stm32F103的程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内,数据以小端格式存放在存储器中。

嵌入式SRAM

STM32F10xxx内置64K字节的静态SRAM。它可以以字节、半字(16位)或全字(32位)访问。SRAM的起始地址是0x2000 0000。

位段

Cortex™-M3存储器映像包括两个位段(bit-band)区。这两个位段区将别名存储器区中的每个字映射到位段存储器区的一个位,在别名存储区写入一个字具有对位段区的目标位执行读-改-写操作的相同效果。

简单的理解就是在4GB的线性地址中是有2段虚拟地址A段、B段,指向同一段物理地址。

下面的映射公式给出了别名区中的每个字是如何对应位带区的相应位的:

bit_word_addr = bit_band_base + (byte_offset×32) + (bit_number×4) 其中:

  • bit_word_addr是别名存储器区中字的地址,它映射到某个目标位。
  • bit_band_base是别名区的起始地址。
  • byte_offset是包含目标位的字节在位段里的序号。
  • bit_number是目标位所在位置(0-31)。

举个例子

如果要对SRAM地址为0x20000300的字节中的位2进行操作,有两种方式

1、 直接对SRAM地址为0x20000300的字节中的位2进行操作

2、 对0x22006008 = 0x22000000 + (0x300×32) + (2×4)对地址的写操作与对SRAM中地址0x20000300字节的位2执行读-改-写操作有着相同的效果。

嵌入式闪存

闪存存储器由主存储块和信息块组成,信息块又包括系统存储器和选择字节,系统存储器中存储着自举程序。

闪存的指令和数据访问是通过AHB总线完成的。预取模块是用于通过ICode总线读取指令的。仲裁是作用在闪存接口,并且DCode总线上的数据访问优先。 读访问可以有以下配置选项:

  • 等待时间:可以随时更改的用于读取操作的等待状态的数量。
  • 预取缓冲区(2个64位):在每一次复位以后被自动打开,由于每个缓冲区的大小(64位)与闪存的带宽相同,因此只通过需一次读闪存的操作即可更新整个缓冲区的内容。由于预取缓冲区的存在,CPU可以工作在更高的主频。CPU每次取指最多为32位的字,取一条指令时,下一条指令已经在缓冲区中等待。
  • 半周期:用于功耗优化。

启动配置

在STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同启动模式。


STM32F103R6之存储器及启动配置

图 1启动模式


内嵌的自举程序

内嵌的自举程序存放在系统存储区,由ST公司在生产线上写入,用于通过可用的串行接口对闪存存储器进行重新编程。


分享到:


相關文章: