STM32学习笔记——三、STM32架构
1 STM32芯片介绍
- 芯片型号STM32F103ZET6
- Z(引脚数):144pin,左下角小圆点为1脚,然后逆时针顺序排列
- E(FLASH大小):512KB
- T(封装):QFP封装,最常用的
- 6(温度):等级A,-40~85度
- ARM内核(基于Cortex-M3 内核,主频75MHZ)
1.1 Cortex-M3 内核
- Cortex-M3内核是什么?
答:Cortex-M3内核是单片机的中央处理器单元CPU 。
- Cortex-M3架构是怎么样的?
答:
2.1Cortex-M3是一个32位处理器内核。内部的数据路径是32位,寄存器是32位,存储器接口是32位。
2.2 采用哈佛架构。拥有独立的指令总线和数据总线,取指与数据访问可以同时进行。
2.3 支持小端模式、大端模式。 。
2 STM32芯片架构
芯片架构简图
- Cortex-M3 内核:内核即CPU,由ARM 公司设计
- 内核之外的部件:被称为核外外设或片上外设
- 片上外设:GPIO、USART(串口)、I2C、SPI 等
- 芯片和外设之间通过总线连接
- 驱动单元4个(理解为CPU部分)
- 被动单元4个(理解为外设)
3 驱动单元和被动单元各部件
系统框图
3.1 ICode总线
ICode总线(Instruction,指令总线):专门用来取指的
- 程序编译后为一条条指令,存在FLASH中
- 内核读取指令,必须通过ICode总线
3.2 驱动单元
3.2.1 DCode总线
DCode总线(Data,数据总线):专门用来取数的
- 数据常量(const修饰):存储在内部FLASH中
- 数据变量:存储在内部SRAM中
- DCode与DMA总线均可以访问数据,取数时需经过一个总线矩阵来仲裁,决定哪个总线取数
3.2.2 DMA总线
DMA总线:专门用来取数,传输数据的
- 数据常量(const修饰):存储在内部FLASH中
- 数据变量:存储在内部SRAM中
- 数据:外设的数据寄存器
- DCode与DMA总线均可以访问数据,取数时需经过一个总线矩阵来仲裁,决定哪个总线取数
3.2.3 系统总线
系统总线:主要访问外设的寄存器
- 寄存器编程(读写寄存器):通过这根系统总线来完成的。
3.3 被动单元
3.3.1 FLASH(内部的闪存存储器)
FLASH(内部的闪存存储器):编译好的程序就放在这个地方
- ICode总线来此取指令
3.3.2 内部的SRAM
内部的SRAM(RAM):程序的变量,堆栈等的开销都是基于内部的SRAM
- DCode总线来去数据
3.3.3 FSMC(灵活的静态的存储器控制器)
FSMC(灵活的静态的存储器控制器):STM32F10xx的一个特色外设
- 可以扩展内存:外部的SRAM、DAND-FLASH、NORFLASH等
- 只能扩展静态的内存:名称里面带static。
- 不能扩展动态的内存:SDRAM不能扩展
静态内存、栈、堆:
- 静态内存:
静态内存用来保存局部static对象、类的static数据成员、以及定义在任何函数之外的变量。
- 局部static对象
- 类的static数据成员
- 任何函数之外的变量
- 生命周期:从被定义开始,一直存在程序的整个声明周期之中。由编译器自动创建和销毁
- 栈内存:
栈用来保存定义在函数内的非static对象
- 在函数内的非static对象
- 生命周期:仅在其定义的程序块运行时才存在
- 堆内存(动态内存):
除了静态内存和栈内存,每个程序还有一个内存池。这部分空间被称为自由空间或者堆。程序用堆来存储程序动态分配的对象。
- 动态分配的对象
- 生命周期: 动态内存的生存周期由程序控制,当动态内存不在使用时,代码必须显示地销毁他们。
- 使用动态内存的原因:
- 程序不知道自己需要使用多少对象
- 程序不知道所需对象的准确类型
- 程序需要在多个对象间共享数据
- 动态内存形式:指针,智能指针等
3.4 AHB到APB的桥(片上外设)
从AHB总线延伸出来的两条APB2和APB1总线,上面挂载着STM32的各种各样的特色外设
- GPIO、串口、I2C、SPI等外设就挂载在这两条总线上