初学32,留下一点自己学习的记录,以便今后参考,大神指明错误不胜感激
一.首先说说STM32F10x芯片由丝印所体现出的共同点和区别。
先简单说说命名规则:
101基本型,102USB基本型,103增强型,105或107互联型。
T:36脚,C:48脚,R:64脚,V:100脚,Z:144脚。
C:256K SRAM, D:384K SRAM, E:512K SRAM。
我们正对芯片的丝印,会看到芯片左下角会有一个小圆点(正方向),有的在右上角会有一个稍大点的圆圈标记,靠近左下角小圆点的管脚号为1,然后以逆时针方向,ZET6最后一个管脚号为144,VET6最后一个管脚号为100,即是Z的管脚多于V的,说以说Z的功能也要多于V的;接下来说说丝印上的ARM和ST,crotex-Mx内核是由ARM公司(就叫做IP厂商)设计的,一块32除了内核还必须有外围电路,ST公司在获得ARM内核设计的授权后,据此设计出外围电路(SOC厂商,像三星,苹果,飞思卡尔。。。都是SOC厂商,其使用的内核都是IP厂商授权的),比如说储存程序的FLASH,储存变量的SRAM,外设(GPIO,IIC,SPI,USTAR等等),小结一下32的芯片构架是由内核(驱动单元)和外设(被动单元)组成。
二.STM32F10xx 的系统框架的理解
(1)驱动单元
Icode总线:
我们写好的程序写好后通过编译都变成一条条指令存储在外设的FLASH里面,内核要读取这些指令来执行程序就必须通过Icode总线(专门用来取指)。
DCode总线与DMA总线:
即为DATA,我们知道常量const 存放在内部FLASH里面,而变量存在内部SRAM里面。这些数据可以由DCode和DMA来读取,为了避免两者同时去读取数据从而造成冲突,所以在两者读取数据的时候会有一个总线矩阵来裁定谁来读取数据。
System总线:
读取数据,最主要还是用来访问外设的寄存器,即读写寄存器都是通过这条总线来完成的。
DMA总线:
说先说这条总线也是主要传输数据的,这个数据可以是某个外设的数据寄存器,可以是SRAM,可以是内部的FLASH
我们以一个例子来说明DMA总线的作用,还有简单的区分一下DMA和DCode的区别,如果我们没有DMA ,现在要从SRAM里读取一个数据到内部的外设数据寄存器DR,首先CPU通过DCode总线将数据从SRAM读到CPU的内部的通用寄存器里来暂存数据,然后在通过DCode总线将数据传到DR,这样通过了CPU作为数据的中转。但是我们现在有了DMA总线,只需要CPU发送命令就可以将SRAM里的数据直接发送到DR。
(2)被动单元
内部FLASH:
内部闪存存储器,我们编写好的程序通过编译后变成一条条指令存放在这里,Crotex-Mx通过ICode总线访问内部FLASH来取指。
内部SRAM:
Static Random Access Memory
它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。不像DRAM(Dynamic Random Access Memory)那样需要刷新电路,每隔一段时间,固定要对DRAM刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,所以在主板上SRAM存储器要占用一部分面积。
当然SRAM的优点就是速度快,不必配合内存刷新电路,可提高整体的工作效率.
SRAM的缺点是集成度低,功耗较大,相同的容量体积较大,而且价格较高,所以少量用于关键性系统以提高效率。
像程序的变量,堆栈等等的开销都是基于内部的SRAM,Crotex-Mx通过DCode总线来访问它。
FSMC:
Flexible Static Memory Controller
可变静态存储控制器,这是STM32系列采用一种新型的存储器扩展技术,由于通过对特殊功能寄存器的设置,FSMC能够根据不同的外部存储器类型,发出相应的数据/地址/控制信号类型以匹配信号的速度,从而使得STM32系列微控制器不仅能够应用各种不同类型、不同速度的外部静态存储器,而且能够在不增加外部器件的情况下同时扩展多种不同类型的静态存储器,满足系统设计对存储容量、产品体积以及成本的综合要求。
强调一下,只能拓展静态内存。
STM32F10xx系统时钟树:
先来说说5个时钟源,如图左边部分:
1.HSI是高速内部时钟,RC振荡器频率为16MHz,可以直接作为系统时钟或经过二分频后用作PLL的输入。
2.HSE是高速外部时钟,可接4~26MHz石英陶瓷谐振器或者接外部时钟源,可以直接作为系统时钟或经过二分频后用作PLL的输入。
3.LSE是低速外部时钟,接32.768KHz石英晶体,主要是RTC时钟源。
4.LSI是低速内部时钟,RC振荡器,32KHz左右,供独立看门狗和自动唤醒单元使用。
5.PLL为锁相环倍频输出
使用的系统时钟是72 MHz,如图左边部分是选择时钟源内部还是外部时钟,右边绿色的部分是针对于不同外设 对系统时钟进行不同的时钟分频。
小结一下,APB1操作速度限于36MHZ,APB2操作用于全速72MHZ。
APB1挂载低速外设,APN2 AHB挂载高速外设。
以上时钟输出中AHB总线时钟,内核时钟,各种APB1 APB2外设都带使能控制,当需要某个模块时,一定要先使能对应的时钟,通过RCC_AHBENR来打开外设时钟,使能时钟的方法会在后面贴出。