• 一、总线的概念
  • 二、STM32的总线结构
    • 2.1 STM32的总线矩阵
    • 2.2 STM32的存储器映射
    • 2.3 STM32的外设寄存器

一、总线的概念

总线是连接多个部件的信息传输线,是各部件共享的传输介质。总线是一种电路,它是CPU、RAM、ROM、输入、输出等设备传递信息的公共通道,充当数据在计算机内传输的高速公路。

总线的特性包括以下几方面:

  • 机械特性:物理尺寸、插头形状、管脚数、排列顺序等;
  • 电气特性:信号线的电平范围、电源电压等;
  • 功能特性:每根传输线的功能,如数据、地址、控制等;
  • 时间特性:信号的前后时序关系,如时钟同步方式等;
  • 性能指标:总线宽度、总线带宽、信号线数、总线控制方式、带载能力等;

总线的应用主要有以下几种:

  • 片内总线:芯片内部总线,例如运算器和cache之间的总线;
  • 系统总线:系统总线也称为板级总线。处理器与主存、I/O等部件之间的信息传输线。系统总线中常见的三总线结构:数据总线(DB)、地址总线(AB)、控制总线(CB);
  • 通信总线:计算机系统之间,或计算机与其他设备之间的信息传输线。通信总线可以分为串行通信和并行通信。

二、STM32的总线结构

STM32是一系列基于ARM Cortex-M内核的32位微控制器,它具有丰富的外设资源和灵活的存储器映射。本文将从以下几个方面介绍STM32的总线结构:

  • STM32的总线矩阵
  • STM32的存储器映射
  • STM32的外设寄存器

2.1 STM32的总线矩阵

STM32采用了多层AHB(Advanced High-performance Bus)总线矩阵,用于连接Cortex-M内核、DMA控制器、外设和存储器。STM32的总线矩阵可以分为以下六部分:

  • ICode总线:用于访问存储空间里指令的总线;
  • DCode总线:用于访问存储空间里数据的总线;
  • System总线:用于访问指令、数据以及调试模块接口;
  • DMA总线:用于内存与外设之间的数据传输;
  • Bus matrix:用于总线之间的访问优先级管理控制;
  • APB总线:用于外设接口的数据传输;

总线结构:

总线矩阵:

其中:

  • ICode、DCode、System Bus都是AHB总线,可以实现高速数据传输。

  • APB(Advanced Peripheral Bus)则是较慢的外设总线,通过两个AHB-APB桥接器连接到AHB上。APB1上挂接有DAC、UART等外设,其最高频率可达36MHz;APB2上挂接有ADC、GPIO等外设,其最高频率可达72MHz。

2.2 STM32的存储器映射

STM32采用了统一编址的方式,将存储器和外设都映射到一个4GB(2^32字节)的逻辑地址空间中。STM32将4GB空间分为了八个区域,每个区域大小为512MB,分别为:

  • 0x0000 0000 ~ 0x1FFF FFFF (512MB):作为代码区,用于存放下载的代码。系统上电后,将从该部分读取代码;
  • 0x2000 0000 ~ 0x3FFF FFFF (512MB):作为SRAM区,用于存放运行代码。系统上电后,将从Flash读取代码,放到SRAM里,CPU再从SRAM读取代码运行;
  • 0x4000 0000 ~ 0x5FFF FFFF (512MB):作为片上外设区,用于存放厂商外设寄存器。要操作外设,即修改这里对应的外设寄存器;
  • 0x6000 0000 ~ 0x9FFF FFFF (1GB):作为片外RAM,用于扩展RAM。当SRAM或者Flash不够用时,MCU通过FSMC外接其它IC芯片,则在这个地址范围读写IC芯片数据;
  • 0xA000 0000 ~ 0xDFFF FFFF (1GB):作为片外外设区,用于读写扩展IC芯片的寄存器。ST只用了这里的一半空间,另外一空间未使用;
  • 0xE000 0000 ~ 0xFFFF FFFF (512MB):作为内核外设区,用于存放Cortex-M3内核的内部外设。Cortex-M3内核的内部外设有NVIC、Systick等;

2.3 STM32的外设寄存器

STM32的外设寄存器是用来控制和配置外设功能的特殊存储单元,它们与存储器统一编址,可以通过指针操作来访问和修改。STM32的外设寄存器包括以下几类:

  • 复位和时钟控制寄存器(RCC):用于控制系统时钟源、时钟分频、时钟使能等功能;
  • 中断和异常控制寄存器(NVIC):用于控制中断和异常的优先级、使能、屏蔽等功能;
  • 通用输入输出端口寄存器(GPIO):用于控制GPIO的模式、速度、输出类型、上下拉等功能;
  • 定时器寄存器(TIM):用于控制定时器的工作模式、预分频、自动重装载、捕获比较等功能;
  • 串行通信接口寄存器(USART):用于控制串口的波特率、数据位、停止位、校验位等功能;
  • 模数转换器寄存器(ADC):用于控制模拟信号的采样、转换、触发等功能;

STM32的外设寄存器是编程中最常用到的部分,需要熟练掌握每个寄存器的功能和位域含义。本文只是简单介绍了STM32的总线结构。


~