許多像我同樣的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卡溝通的接口。