? 在了解stm32系列产品前,我们需要了解什么叫小容量、中容量、大容量产品。顾名思义,容量即标志着一个物体装置着多少东西,对于stm32而言,存储器的大小就标志着它容量的大小。
小容量产品:指闪存存储器容量在16K至32K字节之间的STM32F101xx、STM32F102xx和 STM32F103xx微控制器。
中容量产品:指闪存存储器容量在在64K至128K字字节之间的STM32F101xx、STM32F102xx和 STM32F103xx微控制器。
大容量产品:指闪存存储器容量在256K至512K字节之间的STM32F101xx、STM32F102xx和 STM32F103xx微控制器。
总线架构
?? 在小容量、中容量、大容量产品中,主系统有下图所示:
?接下来,我们对不同部分做出分析:
? Cortex-M3是stm32的内核,也就是我们俗称的中央处理器cpu,CM3 采用了哈佛结构,拥有独立的指令总线和数据总线,指令总线和数据总线共享同一个存储器空间4G。
? 上图可以看到的是,它联络着三条总线,分别是ICode、DCode、SyStem。
? I-Code 总线是一条基于AHB-Lite 总线协议的 32 位总线,负责在 0x0000_0000 – 0x1FFF_FFFF 之间的取指操作。取指以字的长度执行,即使是对于 16 位指令也如此。因此 CPU 内核可以一次取出两条 16 位 Thumb 指令。
? D-Code 总线也是一条基于 AHB-Lite 总线协议的 32 位总线,负责在0x0000_0000 – 0x1FFF_FFFF之间的数据访问操作。尽管 CM3支持非对齐访问,但你绝不会在该总线上看到任何非对齐的地址,这是因为处理器的总线接口会把非对齐的数据传送都转换成对齐的数据传送。因此,连接到 D-Code总线上的任何设备都只需支持 AHB-Lite 的对齐访问,不需要支持非对齐访问。
?系统总线也是一条基于 AHB-Lite 总线协议的 32 位总线,负责在0x2000_0000 – 0xDFFF_FFFF 和0xE010_0000– 0xFFFF_FFFF 之间的所有数据传送,取指和数据访问都算上。和 D-Code 总线一样,所有的数据传送都是对齐的。
?? 上面说了CM3是系统cpu,那DMA是什么呢?
?? DMA是直接存储器访问,DMA在DMA控制器的控制下,实现让存储器与外设、外设与外设之间直接交换数据,中间不需要经过CPU的累加器中转,并且内存地址的修改、传送完毕的结束报告都是由硬件电路(DMA控制器)实现的,CUP除了在数据传输开始和结束时进行中断处理外,在整个传输过程中CPU都可以和输入输出处于并行操作状态,一个DMA传送只需要执行一个DMA周期,相当于一个总线读写周期。
DMA将DMA的AHB主控接口与总线矩阵相联,总线矩阵协调着CPU的DCode和DMA到 SRAM、闪存和外设的访问
可能上面的解释看着有点懵,没关系,我们来看一下DMA的工作原理就知道了。
?我们知道,一般而言,CPU总线是由CPU管理的,但是DMA工作的时候,CPU总线就会由DMA控制器管理,控制传送的字节数,判断DMA是否是否结束以及发出DMA结束的信号。
a.当外设有DMA需求并准备就绪时,就向DMA控制器发送DMA请求。
b. DMA控制器接收请求后,向CPU发送总线接管请求.
c. CPU接到总线接管请求后,则会在当前总线周期结束后进行中断处理并返回响应信号,通知DMA控制器其已经放弃了对总线的控制权。
d. DMA控制器获得总线的控制权,并对外设发送应答信号,通知外设可以进行DMA传输
e. DMA控制器向存储器发送地址信号和向存储器及外设发出读/写控制信号,控制数据按初始化设定的方向传送,实现外设与内存的数据传输。
f. 数据全部传输结束后,DMA控制器向CPU发送结束信号,要求撤销总线请求信号,CPU接收到信号后,收回对总线的控制权。
说到这里,相信总线矩阵是什么应该很清楚了,矩阵总线就是用来协调DMA和CM3的一个关系处理器。
最后的AHB就是起到总线矩阵和系统总线通信的工具了,构成二者到外设的通道。从上图可以看出,APB分为两种:APB1和APB2。这样是为了适应不同速率的外设,同时兼顾性能功耗的考虑。APB1的操作频率限于36MHz,APB2操作于全速(最高72MHz)。
存储器
? STM32F10XXX中flash,内置SRAM,片上寄存器等一起构成一个4GB的线性地址空间。数据采用小端格式存储,即低字节位于低地址(两低为小端)
?
|