以stm32f103c8t6为例:

内核:ARM 32位Cortex-M3 CPU,72MHz工作频率,是RISC处理器


存储器:

ROM(flash):64K字节,存储 Code 和 RO-data

RAM(sram):20K字节,存储 RW-data 和 ZI-data

在这里插入图片描述

flash里面的数据掉电可保存,sram中的数据掉电就丢失,sram的执行速度要快于flash,flash容量大于sram。
上方的最低内存地址,最高地址,都是在flash和sram中。
正常下载程序都是下载存储进flash里面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Code:代码存储区

RO-data:只读数据存储区,
存储文字常量

RW-data:读写数据存储区,
存储包括栈区(stack)、堆区(heap)、全局变量区(静态区)(static)

ZI-data:零初始化数据区
//--------------------------------------------------------------
全局变量存放在静态存储区,位置是固定的。
局部变量在栈空间,栈地址是不固定的。
栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
全局存储区(静态存储区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
常量存储区:这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改。

使用mdk编译时,可以看到output:

1
2
linking...
Program Size: Code=16904 RO-data=268 RW-data=320 ZI-data=19368

封装:LQFP64,薄型QFP(Low-profile Quad Flat Package),中文含义叫四方扁平式封装技术(Quad Flat Package)。引脚在外面露着,爬着。

其它封装:FBGA,是Fine-Pitch Ball Grid Array(意译为“细间距球栅阵列”)的缩写,是细间距球栅阵列,是一种在底部有焊球的面阵引脚结构。没有引脚,贴着。


系统架构

image-20210929091554826


一个非常好的博客文章:https://www.cnblogs.com/yihuihong/p/4965997.html

在此备份👇:

  1. 芯片结构组成图:

img

  1. STM32内部结构

img

  1. Cortex-M3模块结构图

img

  1. STM3210X内部结构

img

img


四个主动单元 :

​ M3内核的ICode总线(I-bus)、DCode总线(D-bus)、 系统总线(S-bus)、DMA(DMA1、DMA2、以太网DMA)

四个被动单元 :

​ 内部SRAM、内部闪存、FSMC、AHB到APB桥

ICode总线 :

​ 将M3内核的指令总线与FLASH指令接口相连,用于指令预取

DCode总线:

​ 将M3内核的数据总线与FLASH数据接口相连,常量加载和调试

系统总线 :

将M3内核的系统总线与总线矩阵相连,协调内核与DMA访问

DMA总线:

将DMA的AHB主控接口与总线矩阵相连,协调CPU的DCode和DMA到SRAM、闪存、外设的访问

总线矩阵:

协调内核系统总线和DMA主控总线间的访问仲裁,仲裁采用轮换算法。

此总线矩阵由三个驱动部件(CPU 的 DCode、系统总线和 DMA 总线)和三个被动部件(闪存存储器接口、SRAM 和 AHB2APB 桥)构成。

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

AHB到APB桥 :

两个AHB/APB桥在AHB和两个APB总线间提供同步连接

APB1速度限于36MHz,APB2全速最高72MHz


存储器映像
image-20210929163541040


时钟

image-20210929172247441