本文转载自http://blog.csdn.net/charmingsun/article/details/52258419
官方文档:
STM32F411 参考手册
STM32F411 数据手册
Cortex™-M4F 编程手册
STM32 微控制器系统存储器自举模式应用笔记
STM32™ 自举程序中使用的 USART 协议
ARM Cortex™-M Programming Guide to Memory Barrier Instructions
主系统由 32 位多层 AHB 总线矩阵构成,可实现以下部分的互连:
有关AHB总线和APB总线的更多信息请参考博文:浅析AMBA规范以及AMBA 5 AHB接口和AMBA 3 APB接口
1、六条主控总线:
● Cortex™-M4F 内核 I 总线、D 总线和 S 总线;
● DMA1 存储器总线;
● DMA2 存储器总线;
● DMA2 外设总线。
2、五条被控总线:
● 内部 Flash ICode 总线;
● 内部 Flash DCode 总线;
● 主要内部 SRAM;
● AHB1 外设(包括 AHB-APB 总线桥和 APB 外设);
● AHB2 外设。
借助总线矩阵,可以实现主控总线到被控总线的访问,这样即使在多个高速外设同时运行期间,系统也可以实现并发访问和高效运行。此架构如 Figure 1 所示。 地址范围 存储器区域 指令和数据存取
● 访问映射到 1 MB 外设位段区域的 32 MB 外设别名区域:
地址范围 | 存储器区域 | 指令和数据存取 |
---|---|---|
0x40000000-0x400FFFFF | 外设位段区域 | 可以像访问外设寄存器那样直接访问此存储器区域,但是此区域也可以使用位段别名按位寻址 |
0x42000000-0x43FFFFFF | 外设位段别名区域 | 本区域的数据存取将被映射到位段区域。写操作相当于读-改-写操作。不允许存取指令。 |
注意:位段传输的大小与指令规定的传输大小相匹配,可以为字节、半字或字。这两个别名区域位于存储器映射图中的保留区域,所以说只有位段区域映射到别名区域,而没有存储器映射到别名区域。
可以直接操作别名区域。在别名区域写一个字将更新位段区域的一个位。被写进别名区域的字的第 0 位的值决定了被写进位段区域的目标位的值。写进一个第 0 位为 1 的值将使位段区域对应位置 1,写进一个第 0 位为 0 的值将使位段区域对应位置 0。在别名区域写进的数值中的第 1 位到第 31 位对位段区域位的值没有影响。在别名区域写入 0x01 和写入 0xFF 的效果相同,在别名区域写入 0x00 和写入 0x0E 的效果相同。
在别名区域读取一个字:
● 0x00000000 表示位段区域的对应位的值为 0
● 0x00000001 表示位段区域的对应位的值为 1
可通过一个映射公式说明别名区域中的每个字与位段区域中各个位之间的对应关系。映射公式为:
bit_word_addr = bit_band_base + (byte_offset x 32) + (bit_number × 4)
其中:
— bit_word_addr 代表别名区域中将映射到目标位的字的地址
— bit_band_base 代表别名区域的起始地址
— byte_offset 代表目标位所在位段区域中的字节编号
— bit_number 代表目标位的位位置 (0-7)
示例
下例说明如何将 SRAM 地址 0x20000300 处字节的位 2 映射到别名区域:
0x22006008 = 0x22000000 + (0x300*32) + (2*4)对地址 0x22006008 执行写操作相当于在 SRAM 地址 0x20000300 处字节的位 2 执行读-修 改-写操作。
对地址 0x22006008 执行读操作将返回 SRAM 地址 0x20000300 处字节的位 2 的值(0x01 表示位置位,0x00 表示位复位)。
有关位段的详细信息,请参见 Cortex™-M4F 编程手册 (Cortex®-M4 programming manual)。
右边部分:
挂接在 APB1、 APB2、 AHB1、 AHB2 总线上的寄存器和 I/O 端口位于 block 2。位于block 7的Cortex-M4 内部外设有:NVIC (Nested Vectored Interrupt Controller)、SCB (System Control Block)、SysTick (System timer)、MPU (Memory Protection Unit)、FPU (Floating-point Unit)。
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』