许多像我同样的STM32初学者,都每每忽视了STM32系统架构的学习。这对于实际应用并无啥大的影响,可是总感受怎么学也没法看清STM32的全貌,因此本文我将带领你们一块儿厘清STM32F103的总线结构和各部分外设之间的关系。在《三体》小说中,做者曾用军队阵列的方法模拟了冯诺依曼架构的计算机,读来画面感十足,且易于理解,本文也力求解释的形象与生动。架构
在罗列各个方阵前,咱们有必要先登上高山,一览军队全貌,如官方手册里的框图所示,相比51单片机,STM32F103系统仍是至关复杂的,可是其阵列也必将威武雄壮。学习
它是STM32F103的内核,也就是CPU,至关于元帅。除掉他,其余部件都是片上外设,注意是片上的,也就是那块咱们肉眼所见的芯片里的外设。这位元帅足不出户,即可操纵队列,依靠的是本身强大的数字运算能力和强大的总线设计。在阵列中,数据的运算都呈报给元帅来作。设计
阵列的运行须要有人下达指令,元帅Cortex-M3是命令的下发者,却并不是命令的产生者。那么命令从何而来?在《三体》中,冯诺依曼在布阵前早已想好了指令。一样,各位STM32的热爱者才是聪慧的命令发起者——咱们写好的程序被译成机器指令存储于Flash中。ICode总线就是一队骑兵,将指令一条条送达给元帅Cortex-M3。blog
Bus-Matrix的功能是总线仲裁。相似于如今的快递站,假如没有快递站做为中转,一家快递公司的送货路线规划就变成了14亿条。在阵列中,方阵Bus-Matrix做为中介,减小了骑兵队的数量开销,增长了系统的简洁有序性,下降了信息传输的错误率。在图中,Bus-Matrix右侧安排了四支骑兵,他们送来的信息都被加以分类,而左侧的四支骑兵则能够从属于本身的类别中拿走信件,避免了错拿的状况。这就是Bus-Matrix的做用之处。接口
人如其名,骑兵队DCode被用来传送数据,这里的数据指程序中的常量和变量。常量存储在Flash,变量和堆栈则存储在SRAM。元帅Cortex-M3须要这些数据来做运算,中途还会让骑兵队DCode送些数据回去存储。队列
这个总线是被用来配置和访问片上外设寄存器的。元帅Cortex-M3要调度众多的外设方阵,因此专门设立了这样一支骑兵队。咱们常说配啥啥寄存器,其实就是间接在给骑兵队System发号施令呢!系统架构
前面提到的三个骑兵队都通向元帅的大营,Cortex-M喜欢用他们送来的数据作运算。但若是要有不少骑兵前来告诉他这份数据要送到某某处,那他会心力交瘁的,DMA的设立则缓解了元帅的这个压力。STM32F103共有12个DMA通道,也就是12支机动部队,它们活动的路线并不是像前三支骑兵队同样固定。在图中能够看到,外设方阵能够向机动部队发送请求,DMA搬运数据时也不会去打扰元帅,这样的部队真是元帅的得力助手啊。并且DMA能够轻轻松松搬运大批量的数据,从不会耐烦,堪称数据的搬运工。变量
冯诺依曼是个聪明人,早知道阵列模拟不会一次性成功。为了避免用本身一次次从新颁布指令,就安排了名为Flash的将军来记载指令和常量。Flash将军是军中记忆力最好的(咱们知道程序下载到Flash里后是掉电不失去的)。配置
变量和堆栈记录,为啥不能交给Flash一并作呢?这是由于Flash将军虽然记忆好,可是手脚慢,而变量更改比较频繁,让他干这个不合适。代替他的就是SRAM方阵(咱们都知道SRAM是掉电丢失的,可是数据读写真的很快)。下载
由骑兵队AHB分出的两队骑兵APB1和APB2都是用来与片上外设进行交流的。之因此分红两组,是由于他们发现全部的外设方阵中,有的方阵动做快,有的方阵慢手慢脚,因而将慢的一组交给马速较慢的APB1,快的交给马速较快的APB2。其中APB1最快的行军速度为36MHz,APB2最快为72Mhz。
众多的外设方阵,不用像元帅同样每时每刻都得工做着。不工做的时候就得让他们休息着,因此就出现了RCC校尉,用于管理外设方阵的做息(在32里,咱们要使用某个片上外设,都得先开RCC使能)。
Flash和SRAM的能力是有限的,而SD卡的容量很大,SDIO就是专门用来与SD卡沟通的接口。