一、什么是STM32
STM32从字面意思上来讲,ST是指意法半导体公司,M是Microelectronics的缩写,32表示32位,合起来理解,STM32就是ST公司开发的32位微控制器。
二、STM32能做什么
STM32属于微控制器,自带了各种常用通讯接口,比如USART、C、SPI等,可以连接非常多的传感器,可以控制很多设备。现实生活中,我们接触到的很多电器产品都有STM32的身影,比如智能手环,微型四轴飞行器、平衡车、智能电饭锅、3D打印机等。
三、STM32的外观
芯片正面是丝印,上面的丝印代表的意思在文章的后半段会讨论这里不做过多介绍,芯片四周是引脚左下角的小圆点表示引脚1,然后从引脚1起按照顺时针的顺序排列的,在电路中吧芯片的引脚引出来,接到各种传感器上,然后在STM32上编程(实际上通过编程控制这些引脚输出高电平或者低电平)来控制各种传感器工作。
四、STM32的内部结构
我们看到的SMT32芯片是已经封装好的成品,主要由内核和片上外设组成。若和电脑做个对比的话,内核和外设的关系就如电脑上的CPU与主板。内存条、显卡、硬盘发关系。上图中的芯片STMF103采用的是Cortex-M3内核,内核就是CPU,由ARM公司设计,ARM公司其实不生产芯片,而是出售其芯片技术授权。芯片生产厂家如ST、TI、Freescale,负责在内核之外设计部件并生产整个芯片。这些内核之外的部件统称为外设或片上外设,如GPIO、USART(串口)、
C、SPI等都叫作片上外设。上图为STM32芯片的架构简图。
上图我吧STM32F10系列的系统框图分成了俩部分,我会分别介绍他们的作用。
1、ICode总线
ICode中的I表示Instruction,即指令。我们写好的程序编译之后都是一条条指令,存放在Flash存储器中,内核要读取这些指令来执行程序就必须要通过ICode总线,他几乎每分每秒都需要被使用,是专门用来读取指令的。
2、驱动单元(CPU)
1)DCode总线
DCode中的D表示Data,既数据,这就表示这条总线是用来读取数据的。我们在写程序的时候,数据有变量和常量两种,常量在C语言中用const关键字修饰,是存放在内部Flash存储器中的;变量是可变的,不管是全局变量还是局部变量都统一存放在SRAM存储器当中。因为数据可以被DCode总线和DMA总线访问,为了避免访问冲突,在读取数据时需要经过一个总线矩阵来仲裁,来决定是哪根总线读取数据。
2)System总线
System(系统)总线主要是访问外设的寄存器,我们说的寄存器编程就是通过这跟总线读取寄存器来完成的。
3)DMA总线
DMA总线也是主要来传输数据的,这个数据可以是在某个外设的数据寄存器中,也可以是SRAM中或者是在Flash中。跟DCode总线一样要通过总线矩阵来仲裁,来决定是哪根总线读取数据。
3、被驱动单元(外设)
1)Flash接口(内部的闪存储存器)
内部的闪存存储器既Flash,我们编写好的程序就存放在这个地方,驱动单元(CPU)通过ICode总线来取这里面的指令。
2)SRAM
内部的SRAM,既RAM存储器,程序的变量、堆栈等都基于SRAM。驱动单元(CPU)通过DCode总线来访问。
3)FSMC
FSMC的英文全称是Flexible static memory controller,翻译过来就是灵活的静态的存储器控制器,是STM32F10系类中一个很有特色的外设。通过FSMC,我们可以扩展内存,如外部的SRAM;NANDFlash和NORFlash。我们要注意FSMC只能扩展静态内存,既static,不能是动态的内存如:SDRAM就不能扩展。(这玩意就是驱动液晶一类的东西)
4)AHB系统总线
从AHB系统总线延伸出来APB1(低速总线)和APB2(高速总线)-关注我后面我会更新的时钟章节中会谈到为什么是高速和低俗总线,上面挂载着STM32的各种特色外设,我们前面提到的GPIO、 C、USART、SPI就是挂载这俩条总线上的,我们学习32芯片就是学习这些特色外设怎么取驱动外部的各种设备。
到这我们对SMT32已经有了一个大致的了解,关注我下篇文章我会更新如何选取合适的芯片和芯片丝印的命名方法后面还会有时钟和存储器、寄存器的文章更新。