系统架构
系统架构是STM32F1系列单片机的最基础部分,在一定层面上阐述了单片机的运行框架和逻辑,主系统由下列部分构成:
五个驱动单元:
- Cortex™-M3内核DCode总线(D-bus),和系统总线(S-bus)
- 通用DMA1和通用DMA2
- 以太网DMA(互联型专有)
三个被动单元:
- 内部SRAM
- 内部FLASH存储器
- AHB到APB的桥(AHB2APBx),它连接所有的APB设备

通过图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 0000 | 0x5003 FFFF | USB OTG全速 | AHB | 查看详情 |
0x4003 0000 | 0x4FFF FFFF | 保留 | AHB | |
0x4002 8000 | 0x4002 9FFF | 以太网 | AHB | 查看详情 |
0x4002 3400 | 0x4002 3FFF | 保留 | AHB | |
0x4002 3000 | 0x4002 33FF | CRC | AHB | 查看详情 |
0x4002 2000 | 0x4002 23FF | 闪存存储器接口 | AHB | |
0x4002 1400 | 0x4002 1FFF | 保留 | AHB | |
0x4002 1000 | 0x4002 13FF | 复位和时钟控制 | AHB | 查看详情 |
0x4002 0800 | 0x4002 0FFF | 保留 | AHB | |
0x4002 0400 | 0x4002 07FF | DMA2 | AHB | 查看详情 |
0x4002 0000 | 0x4002 03FF | DMA1 | AHB | 查看详情 |
0x4001 8400 | 0x4001 FFFF | 保留 | AHB | |
0x4001 8000 | 0x4001 83FF | SDIO | AHB | 查看详情 |
0x4001 4000 | 0x4001 7FFF | 保留 | APB2 | |
0x4001 3C00 | 0x4001 3FFF | ADC3 | APB2 | 查看详情 |
0x4001 3800 | 0x4001 3BFF | USART1 | APB2 | 查看详情 |
0x4001 3400 | 0x4001 37FF | TIM8定时器 | APB2 | 查看详情 |
0x4001 3000 | 0x4001 33FF | SPI1 | APB2 | 查看详情 |
0x4001 2C00 | 0x4001 2FFF | TIM1定时器 | APB2 | 查看详情 |
0x4001 2800 | 0x4001 2BFF | ADC2 | APB2 | 查看详情 |
0x4001 2400 | 0x4001 27FF | ADC1 | APB2 | 查看详情 |
0x4001 2000 | 0x4001 23FF | GPIO端口G | APB2 | 查看详情 |
0x4001 1C00 | 0x4001 1FFF | GPIO端口F | APB2 | 查看详情 |
0x4001 1800 | 0x4001 1BFF | GPIO端口E | APB2 | 查看详情 |
0x4001 1400 | 0x4001 17FF | GPIO端口D | APB2 | 查看详情 |
0x4001 1000 | 0x4001 13FF | GPIO端口C | APB2 | 查看详情 |
0X4001 0C00 | 0x4001 0FFF | GPIO端口B | APB2 | 查看详情 |
0x4001 0800 | 0x4001 0BFF | GPIO端口A | APB2 | 查看详情 |
0x4001 0400 | 0x4001 07FF | EXTI | APB2 | 查看详情 |
0x4001 0000 | 0x4001 03FF | AFIO | APB2 | 查看详情 |
0x4000 7800 | 0x4000FFFF | 保留 | APB1 | |
0x4000 7400 | 0x4000 77FF | DAC | APB1 | 查看详情 |
0x4000 7000 | 0x4000 73FF | 电源控制(PWR) | APB1 | 查看详情 |
0x4000 6C00 | 0x4000 6FFF | 后备寄存器(BKP) | APB1 | 查看详情 |
0x4000 6800 | 0x4000 6BFF | bxCAN2 | APB1 | 查看详情 |
0x4000 6400 | 0x4000 67FF | bxCAN1 | APB1 | 查看详情 |
0x4000 6000 | 0x4000 63FF | USB/CAN共享SRAM | APB1 | |
0x4000 5C00 | 0x4000 5FFF | USB全速设备寄存器 | APB1 | 查看详情 |
0x4000 5800 | 0x4000 5BFF | I2C2 | APB1 | 查看详情 |
0x4000 5400 | 0x4000 57FF | I2C1 | APB1 | 查看详情 |
0x4000 5000 | 0x4000 53FF | UART5 | APB1 | 查看详情 |
0x4000 4C00 | 0x4000 4FFF | UART4 | APB1 | 查看详情 |
0x4000 4800 | 0x4000 4BFF | USART3 | APB1 | 查看详情 |
0x4000 4400 | 0x4000 47FF | USART2 | APB1 | 查看详情 |
0x4000 4000 | 0x4000 3FFF | 保留 | APB1 | |
0x4000 3C00 | 0x4000 3FFF | SPI3/I2S3 | APB1 | 查看详情 |
0x4000 3800 | 0x4000 3BFF | SPI2/I2S3 | APB1 | 查看详情 |
0x4000 3400 | 0x4000 37FF | 保留 | APB1 | |
0x4000 3000 | 0x4000 33FF | 独立看门狗(IWDG) | APB1 | 查看详情 |
0x4000 2C00 | 0x4000 2FFF | 窗口看门狗(WWDG) | APB1 | 查看详情 |
0x4000 2800 | 0x4000 2BFF | RTC | APB1 | 查看详情 |
0x4000 1800 | 0x4000 27FF | 保留 | APB1 | |
0x4000 1400 | 0x4000 17FF | TIM7定时器 | APB1 | 查看详情 |
0x4000 1000 | 0x4000 13FF | TIM6定时器 | APB1 | 查看详情 |
0x4000 0C00 | 0x4000 0FFF | TIM5定时器 | APB1 | 查看详情 |
0x4000 0800 | 0x4000 0BFF | TIM4定时器 | APB1 | 查看详情 |
0x4000 0400 | 0x4000 07FF | TIM3定时器 | APB1 | 查看详情 |
0x4000 0000 | 0x4000 03FF | TIM2定时器 | APB1 | 查看详情 |
嵌入式SRAM
STM32F1系列单片机内置64K字节的静态SRAM。它可以以字节、半字(16位)或全字(32位)的方式访问。SRAM的起始地址是0x2000 0000。