STM32
芯片主要由内核和片上外设组成,
STM32F103
采⽤的是
Cortex-M3
内核,内核由
ARM
公司设计。
STM32
的芯片⽣产⼚商
ST
,负责在内核之外设计部件并⽣产整个芯片。这些内核之外的部件被称为核外外设或片上外
设,如
GPIO
、
USART
(串⼝)、
I2C
、
SPI
等。

芯片内核与外设之间通过各种总线连接,其中驱动单元有
4
个,被动单元也有
4 个,具体如上图所⽰。可以把 驱动单元理解成是内核部分,被动单元都理解成外设。
ICode
总线
ICode
总线是专⻔⽤来取指令的,其中的
I
表⽰
Instruction(指令),指令的意思。写好的程序编译之后都是⼀条条指令,存放在
FLASH
中,内核通过
ICode
总线读取这些指令来执⾏程序。
DCode
总线
DCode
这条总线是⽤来取数的,其中的
D
表⽰
Data(数据)。在写程序的时候,数据有常量和变量两种。常量 就是固定不变的,⽤
C
语⾔中的
const
关键字修饰,放到内部
FLASH当中。变量是可变的,不管是全局变量还是局部变量都放在内部的
SRAM
。
系统
System
总线
我们通常说的寄存器编程,即读写寄存器都是通过系统总线来完成的,系统总线主要是⽤来访问外设的寄存器。
DMA
总线
DMA
总线也主要是⽤来传输数据,这个数据可以是在某个外设的数据寄存器,可以在
SRAM
,可以在内部。
FLASH
因为数据可以被
Dcode
总线,也可以被
DMA总线访问,为了避免访问冲突,在取数的时候需要经过⼀个总线矩阵来仲裁,决定哪个总线在取数。
内部的闪存存储器
Flash
内部的闪存存储器即
FLASH
,编写好的程序就放在这个地⽅。内核通过
ICode
总线来取⾥⾯的指令。
内部的
SRAM
内部的
SRAM
,是通常所说的内存,程序中的变量、堆栈等的开销都是基于内部
SRAM
,内核通过
DCode总线来 问它。
FSMC
FSMC
的英文全称是
Flexible static memory controller
(灵活的静态的存储器控制器)。通过
FSMC可以扩展内存,如外部的
SRAM
、
NAND-FLASH
和
NORFLASH
。但
FSMC只能扩展静态的内存,不能是动态的内存,比如就不能⽤来扩展
SDRAM
。
AHB
从
AHB
总线延伸出来的两条
APB2
和
APB1
总线是最常⻅的总线,
GPIO
、串⼝、
I2C
、
SPI 这些外设就挂载在这两条总线上。
这个是学习
STM32
的重点,要学会对这些外设编程,去驱动外部的各种设备。