STM32⼯作流程
- 在上电后,芯片复位启动。
- MCU从FLASH通过指令/数据总线分别读取指令和数据,配合解析执⾏,其中在通过RAM和通⽤ 寄存器 (也就是R0~R12的内部寄存器)处理可变数据。
- 根据执⾏的指令,配置和操作外设的的寄存器,从⽽驱动对应外设实现具体的功能。
- 配合上层组合逻辑,结合外设功能,执⾏具体应⽤的全部需求。
上述就是芯片⼯作的流程,⽽作为单片机开发者,实现的代码就是放在FLASH中的程序,由官⽅提供的 SDK包和⽤户裁剪实现定义的外设驱动组成,按照上述流程就包含:
-- 芯片的启动过程中对堆栈的初始化。
-- 系统相关外设的处理(如时钟) => 这部分由⼚商提供,我们把文件放入项⽬即可,以STM32为例 就是启动 文件startup_xxx.s和系统初始化的SystemInit函数。
-- 配置应⽤需要的外设模块。
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的重点,要学会对这些外设编程,去驱动外部的各种设备。