当前位置:网站首页>STM32入门介绍

STM32入门介绍

2022-06-27 01:49:00 小侯同学_2022

入门介绍

1.芯片里面有什么

我们看到的STM32 芯片是已经封装好的成品,主要由内核和片上外设组成。

如图为STM32 芯片架构简图

STM32 芯片架构简图

芯片(这里指内核,或者叫CPU)和外设之间通过各种总线连接,其中驱动单元有4个,被动单元也有4个,具体见图STM32F1Oxx系统框图。为了方便理解,我们都可以把驱动单元理解成是CPU部分,被动单元都理解成外设。下面我们简单介绍下驱动单元和被动单元的各个部件。

1.1 ICode 总线

ICode中的I表示Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在FLASH中内核要读取这些指令来执行程序就必须通过ICode总线,它几乎每时每刻都需要被使用,它是专门用来取指的。

1.2 驱动单元

1.2.1 DCode 总线

DCode 中的D 表示Data,即数据,那说明这条总线是用来取数的。我们在写程序的时候,数据有常量变量两种,常量就是固定不变的,用C 语言中的const 关键字修饰,是放到内部的FLASH当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的SRAM。因为数据可以被Dcode 总线和DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。

1.2.2 系统总线(system)

系统总线主要是访问外设的寄存器,我们通常说的寄存器编程,即读写寄存器都是通过这根系统总线来完成的。

1.2.3DMA 总线

DMA 总线也主要是用来传输数据,这个数据可以是在某个外设的数据寄存器,可以在SRAM,可以在内部的 FLASH因为数据可以被Dcode 总线和DMA 总线访问,所以为了避免访问冲突,在取数的时候需要经过一个总线矩阵来仲裁,决定哪个总线在取数。

02

1.3 被动单元

1.3.1 内部的闪存存储器(FLASH)

内部的闪存存储器即FLASH,我们编写好的程序就放在这个地方。内核通过ICode 总线来取里面的指令。

1.3.2 内部的SRAM

内部的SRAM,即我们通常说的RAM,程序的变量,堆栈等的开销都是基于内部的SRAM内核通过DCode 总线来访问它。

1.3.3 FSMC

FSMC的英文全称是Flexible static memory controller,叫灵活的静态的存储器控制器,是STM32F1Oxx中一个很有特色的外设,通过FSMC,我们可以扩展内存,如外部的SRAMNAND-FLASH和NORFLASH。但有一点我们要注意的是,FSMC只能扩展静态的内存,即名称里面的S:static,不能是动态的内存,比如SDRAM就不能扩展。

1.3.4 AHB 到APB 的桥

AHB总线延伸出来的两条APB2和APB1总线上面挂载着STM32各种各样的特色外设。我们经常说的GPIO、串口、I2C、SPI这些外设就挂载在这两条总线上,这个是我们学习STM32的重点,就是要学会编程这些外设去驱动外部的各种设备。

2.存储器映射

在图STM32 F10xx系统框图中,*被控单元的FLASH,RAM,FSMC和AHB到APB的桥(即片上外设),这些功能部件共同排列在一个4GB的地址空间内。*我们在编程的时候,可以通过他们的地址找到他们,然后来操作他们(通过C语言对它们进行数据的读和写)。

**存储器本身不具有地址信息,**它的地址是由芯片厂商或用户分配,给存储器分配地址的过程就称为存储器映射,具体见图存储器映射。如果给存储器再分配一个地址就叫存储器重映射。

2.1存储器区域功能划分

在这4GB的地址空间中,**ARM已经粗线条的平均分成了8个块,每块512MB,**每个块也都规定了用途,具体分类见表格存储器功能分类。每个块的大小都有512MB,显然这是非常大的,芯片厂商在每个块的范围内设计各具特色的外设时并不一定都用得完,都是只用了其中的一部分而已。

存储器功能分类

2.2 STM32 的外设地址映射

片上外设区分为三条总线,根据外设速度的不同,不同总线挂载着不同的外设,APB1 挂载低速外设APB2 和AHB 挂载高速外设。相应总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。其中APB1 总线的地址最低,片上外设从这里开始,也叫外设基地址。

原网站

版权声明
本文为[小侯同学_2022]所创,转载请带上原文链接,感谢
https://blog.csdn.net/ban_xch/article/details/125434399