目录
(3)通用DMA1(Direct Memory Access)
(2)FSMC(Flexible Static Memory Controller)
一、引言
在学习了前面一些关于STM32的基本用法后,我们能够发现,在STM32中的引脚占绝大部分都是GPIO口,他们无非就是用一些寄存器去控制进行一些输入输出的功能。因此,在了解了STM32的基本用法以后,我们有必要去宏观的了解一下它的总体架构,即stm32中各个部分、各个模块是怎样进行相互连接、相互通信以及相互影响的。
接下来,我们就来了解一下stm32的总体架构。
二、STM32的总体架构
下图是STM32F10x的中文参考手册中截过来的一张关于stm32的系统架构图
在STM32系统架构是一种哈佛架构,主要由三个被动单元、四个主动(驱动)单元以及其他单元构成。
如何去理解主动单元?
简单来说,就是能够自己去主动控制一些数据的通信等等的单元。它能够主动发出一些控制信号,去与其他部分进行数据交互等操作。其中,这里重要的是去与其他设备进行数据的通信,谁给谁发不重要。
如何理解被动单元?
理解了主动单元,被动单元就好理解了,简单理解就是没办法自己控制去进行发送的设备,只能去听别人的,相当于是一个从属的设备,即被动单元是一个处于从属状态的一种设备。
下面,我们来了解一下这三个被动单元和五个主动单元。
1、三个被动单元
(1)内部SRAM
内部SRAM | 存储器(粗略理解成手机的内存) |
所属描述 | SRAM本身不具有控制数据通信,与他人进行数据交互的能力,而是需要CPU内核去给他发送命令,从而控制他去进行读写操作的。因此,它是一个被动单元。 |
主要功能 | 存储程序执行过程中用到的一些变量 |
(2)内部闪存存储器
内部闪存存储器 | FLASH,一种类似电脑硬盘的存储器 |
所属描述 | flash本身也不能去进行发送数据,与他人进行数据交互,只能通过CPU内核或者其他设备模块来控制它进行读写等操作。因此,他也是一种被动单元。 |
主要功能 | flash能够存储我们下载的一些程序、以及程序执行所使用的常量(通常是全局常量) |
因此,我们代码中用到的一些变量都是被存放在SRAM里面,而下载的代码程序以及程序中用到的常量都是统一存储在flash里面,因为我们程序本身也会被转成二进制文件,所以都放在flash里面了,那么很明显,我们flash的容量一般比SRAM的容量要大得多。
以上两种存储器也是我们STM32中最重要的两大被动单元。
(3)AHB到APB的桥(AHB to APBx)
AHB to APBx的桥 | 连接AHB系统和APB外围总线的桥 |
所属描述 | 这些总线需要CPU内核给一些指令才能去控制他们与一些外设进行数据的交互通信。因此,这也是一种被动单元。 |
主要功能 | 桥1,通过APB2总线连接到APB2上的高速外设,速率可高达72MHz; 桥2,通过APB1总线连接到APB1上的低速外设,最高36MHz。 |
STM32要与外设去进行数据传输和数据通信主要就是通过这个总线矩阵,然后AHB系统总线作连接来实现的。
其中,AHB系统总线(Advanced High Performance Bus),即一种高级高性能系统总线,主要用于高性能模块(如CPU、DMA和DSP等)之间的连接。
同时,我们观察系统架构图能够发现,系统总线连接不同外设时还要作区分,这个区分实际上是根据数据传输速率来进行区分的,即外设被分成了高速外设和低速外设两部分。
其中,这里经桥区分后连接外设的APB总线被称为外设总线 (Advanced Peripheral Bus)。STM32中APB2总线上连接的是高速外设,如模数转换ADC1、串口USART1、GPIOA等,APB1总线上连接的是低速外设,如DAC、USART2、定时器TIM2等。关于这些外设的区分,这里有个印象就好,后面我们再慢慢叙述。
实际上,除以上三种被动单元以外,还有一个也是被动单元,即FSMC,这个我们后面再介绍。
2、四个主动(驱动)单元
(1)Cortex-M3内核DCode总线(D-Bus)
Cortex-M3内核DCode总线 | 从内核引出的总线之一 |
简单描述 | 内核通过D-Bus总线发出控制信号或指令与其他设备进行数据传输,因此这是一种主动单元。 |
主要功能 | 通过外部DCode总线连接总线矩阵,然后与闪存存储器的数据接口相连接,实现Flash常量的加载与调试访问 |
下图是该总线进行数据传输的数据流向:
(2)内核系统总线(S-Bus)
内核系统总线(S-Bus) | 从内核引出的总线之一 |
简单描述 | S-Bus总线向其他设备或模块发送各种各样控制信号或者一些指令,来控制我们整个系统的数据传输。 |
主要功能 | 通过外部Syatem总线连接总线矩阵 |
下图是S-Bus总线进行数据传输时的数据流向:
(3)通用DMA1(Direct Memory Access)
(4)通用DMA2
通用DMA1(2) | Direct Memory Access,直接内存访问(直接存储器访问) |
简单描述 | 通过DMA总线链接到总线矩阵。可以对内存发出控制信号,实现内存与外设的数据流动,故是一种主动单元。 |
主要功能 | 相当于CPU的“大秘书”。可以帮助高速运转的CPU实现相对低速的内存与外设之间的数据传输,以降低CPU负担。 |
下图是DMA总线提供直接通道时的数据流向:
3、其他单元
(1)内核ICode总线
内核ICode总线 | 内核引出的总线之一 |
简单描述 | 使读取指令不通过总线矩阵调度,是CPU与flash进行数据交互的一条专用通道 |
主要功能 | 内核通过外部ICode总线连接Flash接口,实现CPU内核对Flash中存放指令(存放了程序和常量的二进制指令)的读取 |
下面是经ICode总线的数据流向:
(2)FSMC(Flexible Static Memory Controller)
FSMC | Flexible Static Memory Controller,可变静态存储控制器 |
简单描述 | 一种存储器扩展机制 |
主要功能 | 用于扩展外部SRAM、Flash、以及直接通过FSMC连接LCD屏幕等 |
以上就是对stm32系统总体架构的一些简单描述。