1. STM32系统框图
STM32微控制器由处理器、存储器、时钟生成(如PLL)和分配逻辑、系统总线以及外设等(I/O接口、通信接口、ADC、DAC、定时器、PWM、RTC等),如图 1所示。
图 1 微控制器系统框图
2. STM3总线架构
STM32主系统由 32 位多层 AHB 总线矩阵构成,借助总线矩阵,可实现8条主控总线到7条被控总线的访问,这样即使在多个高速外设同时运行期间,系统也可以实现并发访问和高效运行。STM32F407的总线架构如图 2所示。
图 2 STM32F407总线架构
8条主控总线如下:
- Cortex™-M4F 内核 I 总线、 D 总线和 S 总线
- DMA1 存储器总线
- DMA2 存储器总线
- DMA2 外设总线
- 以太网 DMA 总线
- USB OTG HS DMA 总线
7条被控总线如下:
- 内部 Flash ICode 总线
- 内部 Flash DCode 总线
- 主要内部 SRAM1 (112 KB)
- 辅助内部 SRAM2 (16 KB)
- AHB1 外设(包括 AHB-APB 总线桥和 APB 外设)。借助两个 AHB/APB 总线桥 APB1 和 APB2,可在 AHB 总线与两个 APB 总线之间实现完全同步的连接,从而灵活选择外设频率。
- AHB2 外设
- FSMC
2.1 S0:I总线
此总线用于将 Cortex™-M4F 内核的指令总线连接到总线矩阵。内核通过此总线获取指令。此总线访问的对象是包含代码的存储器(内部 Flash/SRAM 或通过 FSMC 的外部存储器)。
2.2 S1:D总线
此总线用于将 Cortex™-M4F 数据总线和 64 KB CCM 数据 RAM 连接到总线矩阵。内核通过此总线进行立即数加载和调试访问。此总线访问的对象是包含代码或数据的存储器(内部Flash 或通过 FSMC 的外部存储器)。
2.2 S2:S总线
此总线用于将 Cortex™-M4F 内核的系统总线连接到总线矩阵。此总线用于访问位于外设或 SRAM 中的数据。也可通过此总线获取指令(效率低于 ICode)。此总线访问的对象是112 KB、 64 KB 和 16 KB 的内部 SRAM、包括 APB 外设在内的 AHB1 外设、 AHB2 外设以及通过 FSMC 的外部存储器。
2.3 S3、S4:DMA存储器总线
此总线用于将 DMA 存储器总线主接口连接到总线矩阵。 DMA 通过此总线来执行存储器数据的传入和传出。此总线访问的对象是数据存储器:内部 SRAM( 112 KB、 64 KB、 16 KB)以及通过 FSMC 的外部存储器。
2.4 S5:DMA外设总线
此总线用于将 DMA 外设主总线接口连接到总线矩阵。 DMA 通过此总线访问 AHB 外设或执行存储器间的数据传输。此总线访问的对象是 AHB 和 APB 外设以及数据存储器:内部SRAM 以及通过 FSMC 的外部存储器。
2.5 S6:以太网DMA总线
此总线用于将以太网 DMA 主接口连接到总线矩阵。以太网 DMA 通过此总线向存储器存取数据。此总线访问的对象是数据存储器:内部 SRAM( 112 KB、 64 KB 和 16 KB)以及通过FSMC 的外部存储器。
2.6 S7: USB OTG HS DMA总线
此总线用于将 USB OTG HS DMA 主接口连接到总线矩阵。 USB OTG DMA 通过此总线向存储器加载/存储数据。此总线访问的对象是数据存储器:内部 SRAM(112 KB、 64 KB 和 16 KB)以及通过 FSMC 的外部存储器。
2.7 总线矩阵
总线矩阵用于主控总线之间的访问仲裁管理。仲裁采用循环调度算法。
2.8 AHB/APB总线桥(APB)
借助两个 AHB/APB 总线桥 APB1 和 APB2,可在 AHB 总线与两个 APB 总线之间实现完全同步的连接,从而灵活选择外设频率。有关 APB1 和 APB2 最大频率的详细信息,请参见器件数据手册。
3. 小结
对于初学者来说,深入理解STM32总线架构还是有一定难度的,但个人觉得还是要对其有一些了解,在了解系统框图及总线架构的的基础上,对外设的理解会更加透彻,能够理解处理器和外设是并行运行的,更好的编写底层驱动程序。当对外设有了一定了解后,更有必要深入理解总线架构,这样在驱动程序编写、调试中才能更加得心应手。