初识Stm32
文章目录
stm32的电路图
芯片(这里指内核,或者叫 CPU)和外设之间通过各种总线连接,其中驱动单元有 4 个,被动单
元也有 4 个,具体见图 STM32F10xx 系统框图 。为了方便理解,我们都可以把驱动单元理解成是
CPU 部分,被动单元都理解成外设。
stm芯片架构图
ICode总线
ICode 中的 I 表示 Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在 FLASH****中,内核要读取这些指令来执行程序就必须通过 ICode 总线,它几乎每时每刻都需要被使用,它是专门用来取指的。
简单来说就是用来读取命令(Instruction)的总线。
驱动单元
Dcode总线
DCode 中的 D 表示 Data,即数据,那说明这条总线是用来取数的。我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用 C 语言中的 const 关键字修饰,是放到内部的 FLASH当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的 SRAM。
因为数据可以被Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来
仲裁,决定哪个总线在取数。
简单来说就是用来读程序数据的总线
数据类型 | 储存地点 |
---|---|
常数 | FLASH |
变量 | SRAM |
系统总线
系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统
总线来完成的。
系统总线结合数据总线的功能来搭载信息,地址总线来决定将信息送往何处,控制总线来决定如何动作。
DMA总线
Direct Memory Access(直接存储器访问)
DMA 总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在 SRAM,
可以在内部的 FLASH。因为数据可以被 Dcode 总线和 DMA 总线访问,所以为了避免访问冲突,
在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。
被动单元
内部的闪存储存器
内部的闪存存储器即 FLASH,**我们编写好的程序就放在这个地方。**内核通过 ICode 总线来取里面的指令。
简单来说储存程序的
内部的SRAM
Static Random-Access Memory(静态随机存取存储器)
内部的 SRAM,即我们通常说的 RAM,程序的变量,堆栈等的开销都是基于内部的 SRAM。内核通过 DCode 总线来访问它。
简单来说就是用来储存程序变量的
FSMC
FSMC 的英文全称是 Flexible static memory controller,叫灵活的静态的存储器控制器,是STM32F10xx 中一个很有特色的外设,通过 FSMC,我们可以扩展内存,如外部的 SRAM,NAND FLASH 和 NORFLASH。但有一点我们要注意的是,FSMC 只能扩展静态的内存,即名称里面的S:static,不能是动态的内存,比如 SDRAM 就不能扩展。
AHB 到 APB 的桥
从 AHB 总线延伸出来的两条 APB2 和 APB1 总线,上面挂载着 STM32 各种各样的特色外设。我们经常说的 GPIO、串口、I2C、SPI 这些外设就挂载在这两条总线上,这个是我们学习 STM32 的重点,就是要学会编程这些外设去驱动外部的各种设备。
简单来说就是这上面挂载着许多外设,我们需要用这个总线去访问。
运行原理图
总结表
名称 | 作用 |
---|---|
ICode总线 | 内核通过ICode来读取程序 |
Dcode总线 | 内核通过Dcode来读取变量 |
SRAM | 存储变量 |
FSMC | 扩展外设 |
AHB 到 APB 的桥 | 挂载外设 |
FLASH | 存储程序,存储常量 |
DMA的用处
假设我们CPU要读取一个变量(在SRAM中),传输到一个内部的外设:
情况1:如果不使用DMA总线,CPU首先要通过Dcode总线把数据从SRAM读取到CPU的通用寄存器中,CPU再把数据传到内部的外设。
情况2:如果使用DMA总线,CPU只需要发送一个命令,将SRAM中的数据通过DMA总线搬到内部的外设。这样CPU就空闲了,可以进行其他的操作。
CPU的通用寄存器中,CPU再把数据传到内部的外设。
情况2:如果使用DMA总线,CPU只需要发送一个命令,将SRAM中的数据通过DMA总线搬到内部的外设。这样CPU就空闲了,可以进行其他的操作。