两个设备
总线主设备:能主动发起总线访问请求硬件单元,如ARM_CPU,DMA。
总线从设备:被动响应总线主设备访问请求的硬件单元。
总线矩阵
简单理解:它是一个多路复用的高速交换枢纽,可以同时连接多个总线主机(CPU 内核、DMA、以太网控制器等)和多个总线从机(Flash、RAM、外设寄存器)。
总线矩阵的一些特性
1 支持并行访问
什么是并行访问呢?比如说总线主设备A访问总线从设备B的同时,总线主设备C也可以访问总线从设备D。
2 支持动态优先级调度
当总线主设备A和B都要访问C时,会进行智能仲裁来决定访问顺序。
3 支持专用路径直连
如CPU与Flash之间联系非常频繁,就专门架设 I_code总线。
参考手册中的总线图

I-Code
即Instrution Code指令代码,有时也叫Instrution -Bus 即指令总线。专门负责从程序存储器(一般是Flash中)读取指令,然后交给CPU执行。
D-Code
即Data-Code,全称数据代码总线,负责从Flash中读取常量数据。
这里补充一下:Flash中存储的都是不可修改的数据和指令,因为Flash本就不支持任意擦除修改。
为什么I-Code直接与Flash相连而D-Code没有
因为D-Code在极端条件下会访问内存
System
系统总线,负责处理前两条线管不了的事情,比如访问外设,内存等等。
APB2
高级外设总线,核心作用是为对速度敏感的外设提供一条独立与慢速总线的通道
APB1
提供一条 " 低速,低功耗" 的总线通道,链接速度不敏感的外设。
AHB
高级高性能总线,是MCU内部的总线主干。以最高频率和带宽链接CPU,DMA和内存等核心模块。
其实I-Code , D-Code, system也符合AHB高级高性能总线的标准。
桥1和桥2
叫做速度适配器或协议转换器,就像变速箱。
为什么要有这个桥呢?
因为不是所有设备都是同时工作的,每个设备的工作速度也不尽相同,所以我们需要速度可调。
STM32程序的执行过程
1编译生成二进制可执行文件
2 烧录,把生成的二进制可执行文件下载到单片机中,通过一定的方式放到STM32内置的Flash中
3运行:CPU通过I-Code从Flash中读取指令;
CPU通过D-Code从Flash中读取常量数据;
代码中的变量放在SRAM中,CPU通过system来读写这些变量。(特殊情况下会通过D-Code读取)。
总线
很多人以为总线就是一根线,其实总线包括数据总线,地址总线,控制总线。如下图

统一编址
从 CPU 的角度看,访问内存和访问片上外设没有本质区别,都是读或写操作。 因此,我们只需要给内存的每个存储单元,以及每个片上外设的寄存器,都分配一个唯一的、不重叠的地址。这样,CPU 就可以通过不同的地址来访问不同的目标。
从 C 语言角度,就可以直接使用指针,访问任意位置,可以访问内存,也可以直接访问片上外设,这个叫做统一编址
