STM32F103存储器和总线构架

系统架构

系统架构是STM32F1系列单片机的最基础部分,在一定层面上阐述了单片机的运行框架和逻辑,主系统由下列部分构成:

五个驱动单元:

  • Cortex™-M3内核DCode总线(D-bus),和系统总线(S-bus)
  • 通用DMA1和通用DMA2
  • 以太网DMA(互联型专有)

三个被动单元:

  • 内部SRAM
  • 内部FLASH存储器
  • AHB到APB的桥(AHB2APBx),它连接所有的APB设备
图1 系统结构

通过图1可以看出系统组由几个总线进行每部的传输,分别有ICode总线DCode总线System总线DMA总线总线矩阵AHB/APB桥(APB)等组成。

ICode总线

该总线将Cortex™-M3内核的指令总线与闪存指令接口相连接。指令预取在此总线上完成。

DCode总线

该总线将Cortex™-M3内核的DCode总线与Flash存储器的数据接口相连接(常量加载和调试访问)。

System总线

该总线连接Cortex™-M3内核的系统总线(外设总线)到总线矩阵,总线矩阵协调着内核和DMA间的访问。

DMA总线

总线矩阵协调内核系统和DMA主控总线之间的访问仲裁,仲裁利用轮换算法。在互联型中,总线矩阵包含5个驱动部件(CPU的DCode、System总线、以太网DMA、DMA1总线和DMA2总线)和3个从部件(Flash存储器接口(FLITF)、SRAM和AHB2APB桥)。其他型中总线矩阵包含4个驱动部件(CPU的DCode、System总线、DMA1总线和DMA2总线)和4个被动部件(Flash存储器接口(FLITF)、SRAM、FSMC和AHB2APB桥)。

AHB外设通过总线矩阵与系统总线相连,允许DMA访问。

AHB/APB桥(APB)

两个AHB/APB桥在AHB和2个APB总线间提供同步连接。APB1 操作速度限于36MHz,APB2操作于全速(最高72MHz)。

在每一次复位后,所有除SRAM和FLITF以外的外设都被关闭,在使用一个外设之前,必须设置寄存器RCC_AHBENR来打开该外设的时钟。

当对APB寄存器进行8位或16位访问时,该访问会被自动转换成32位的访问:桥会自动将8位或者32位的数据扩展以配合32位的向量。

存储器架构

STM32单片机将程序存储器数据存储器寄存器输入输出端口被组织在同一个4GB的线性地址空间内。数据字节以小端的格式存放在存储器中。一个字节里的最低地址字节被认为该字的最低有效字节,儿最高地址字节是最高有效字节。

可访问的存储器空间被分为8个主要块,每个块为512MB

起始地址结束地址外设总线寄存器映像
0x5000 00000x5003 FFFFUSB OTG全速AHB查看详情
0x4003 00000x4FFF FFFF保留AHB
0x4002 80000x4002 9FFF以太网AHB查看详情
0x4002 34000x4002 3FFF保留AHB
0x4002 30000x4002 33FFCRCAHB查看详情
0x4002 20000x4002 23FF闪存存储器接口AHB
0x4002 14000x4002 1FFF保留AHB
0x4002 10000x4002 13FF复位和时钟控制AHB查看详情
0x4002 08000x4002 0FFF保留AHB
0x4002 04000x4002 07FFDMA2AHB查看详情
0x4002 00000x4002 03FFDMA1AHB查看详情
0x4001 84000x4001 FFFF保留AHB
0x4001 80000x4001 83FFSDIOAHB查看详情
0x4001 40000x4001 7FFF保留APB2
0x4001 3C000x4001 3FFFADC3APB2查看详情
0x4001 38000x4001 3BFFUSART1APB2查看详情
0x4001 34000x4001 37FFTIM8定时器APB2查看详情
0x4001 30000x4001 33FFSPI1APB2查看详情
0x4001 2C000x4001 2FFFTIM1定时器APB2查看详情
0x4001 28000x4001 2BFFADC2APB2查看详情
0x4001 24000x4001 27FFADC1APB2查看详情
0x4001 20000x4001 23FFGPIO端口GAPB2查看详情
0x4001 1C000x4001 1FFFGPIO端口FAPB2查看详情
0x4001 18000x4001 1BFFGPIO端口EAPB2查看详情
0x4001 14000x4001 17FFGPIO端口DAPB2查看详情
0x4001 10000x4001 13FFGPIO端口CAPB2查看详情
0X4001 0C000x4001 0FFFGPIO端口BAPB2查看详情
0x4001 08000x4001 0BFFGPIO端口AAPB2查看详情
0x4001 04000x4001 07FFEXTIAPB2查看详情
0x4001 00000x4001 03FFAFIOAPB2查看详情
0x4000 78000x4000FFFF保留APB1
0x4000 74000x4000 77FFDACAPB1查看详情
0x4000 70000x4000 73FF电源控制(PWR)APB1查看详情
0x4000 6C000x4000 6FFF后备寄存器(BKP)APB1查看详情
0x4000 68000x4000 6BFFbxCAN2APB1查看详情
0x4000 64000x4000 67FFbxCAN1APB1查看详情
0x4000 60000x4000 63FFUSB/CAN共享SRAMAPB1
0x4000 5C000x4000 5FFFUSB全速设备寄存器APB1查看详情
0x4000 58000x4000 5BFFI2C2APB1查看详情
0x4000 54000x4000 57FFI2C1APB1查看详情
0x4000 50000x4000 53FFUART5APB1查看详情
0x4000 4C000x4000 4FFFUART4APB1查看详情
0x4000 48000x4000 4BFFUSART3APB1查看详情
0x4000 44000x4000 47FFUSART2APB1查看详情
0x4000 40000x4000 3FFF保留APB1
0x4000 3C000x4000 3FFFSPI3/I2S3APB1查看详情
0x4000 38000x4000 3BFFSPI2/I2S3APB1查看详情
0x4000 34000x4000 37FF保留APB1
0x4000 30000x4000 33FF独立看门狗(IWDG)APB1查看详情
0x4000 2C000x4000 2FFF窗口看门狗(WWDG)APB1查看详情
0x4000 28000x4000 2BFFRTCAPB1查看详情
0x4000 18000x4000 27FF保留APB1
0x4000 14000x4000 17FFTIM7定时器APB1查看详情
0x4000 10000x4000 13FFTIM6定时器APB1查看详情
0x4000 0C000x4000 0FFFTIM5定时器APB1查看详情
0x4000 08000x4000 0BFFTIM4定时器APB1查看详情
0x4000 04000x4000 07FFTIM3定时器APB1查看详情
0x4000 00000x4000 03FFTIM2定时器APB1查看详情
寄存器组起始地址

嵌入式SRAM

STM32F1系列单片机内置64K字节的静态SRAM。它可以以字节、半字(16位)或全字(32位)的方式访问。SRAM的起始地址是0x2000 0000。

STM32F103复位系统

复位系统对于STM32单片机来说是一个至关重要系统,可以使单片机在不断电的情况下重新启动。STM32F1系列的单片机支持三种复位,分别是系统复位上电复位备份区域复位

系统复位:

系统复位发生时,将复位所有寄存器至初始状态,但是这种复位会排除时钟控制器的RCC_CSR寄存器的复位标志位和备份中的寄存器。

以下的几种方式都可以使单片机触发一次系统复位:

  1. NRST引脚上的低电平(外部复位)
  2. 窗口看门狗计数终止(WWDG)复位
  3. 独立看门狗计数终止(IWDG)复位
  4. 软件复位(SW复位)
  5. 低功耗管理复位

可以通过查看RCC_CSR控制状态寄存器中的复位状态标志位来识别复位事件的来源。

NRST引脚复位

当NRST引脚接收到一个持续1.5ms-4.5ms的低电平信号后,系统就会进行一次复位,这种复位方式一般多用于首次上电后复位、手动复位等方式。

看门狗复位

窗口看门狗计数终止(WWDG)和独立看门狗计数终止(IWDG)都会发出复位信号,一般发生在没能在正确的时间喂狗时。

软件复位

软件复位可以通过将M3内核中断应用和复位控制器中的SYSRESETREQ置为“1”,可以时间软件复位。

低功耗管理复位

在下列两种情况下可产生低功耗管理复位:

  1. 在进入待机模式时产生低功耗管理复位:
    • 通过将用户选择字节中的nRST_STDBY位置’1’将使能该复位。这时,即使执行了进入待
    • 机模式的过程,系统将被复位而不是进入待机模式。
  2. 在进入停止模式时产生低功耗管理复位:
    • 通过将用户选择字节中的nRST_STOP位置’1’将使能该复位。这时,即使执行了进入停机
    • 模式的过程,系统将被复位而不是进入停机模式

电源复位

电源复位将复位除了备份区域外的所有寄存器。其中当下列事件之一发生时会产生电源复位:

  1. 上电/掉电复位(POR/PDR复位)
  2. 从待机模式中返回

复位源将最终作用于RESET引脚,并在复位过程中保持低电平。复位入口矢量被固定在地址0x0000,0004。芯片内部的复位信号会输出在NRST引脚上,脉冲发生器保证每个复位源都能有至少20μs的脉冲延时;当NRST引脚被拉低产生外部复位时,它会产生复位脉冲。

图1 复位电路

备份区域复位

备份区域拥有两个专门的复位,只会影响备份区域,当下列事件之一发生时,会产生备份区与复位。

  1. 软件复位,备份区域复位可由设置备份域控制寄存器(RCC_BDCR)中的BDRST位产生。
  2. 在VDD和VBAT两者掉电的前提下,VDD或VBAT上电将引发备份区域复位。