大話STM32F103系統架構


前言

  許多像我一樣的STM32初學者,都往往忽視了STM32系統架構的學習。這對於實際應用並沒有啥大的影響,但是總感覺怎么學也無法看清STM32的全貌,所以本文我將帶領大家一起厘清STM32F103的總線結構和各部分外設之間的關系。在《三體》小說中,作者曾用軍隊陣列的方法模擬了馮諾依曼架構的計算機,讀來畫面感十足,且易於理解,本文也力求解釋的形象與生動。

 

系統全貌

  在羅列各個方陣前,我們有必要先登上高山,一覽軍隊全貌,如官方手冊里的框圖所示,相比51單片機,STM32F103系統還是相當復雜的,但是其陣列也必將威武雄壯。

 

系統剖析

Cortex-M3內核

  它是STM32F103的內核,也就是CPU,相當於元帥。除掉他,其他部件都是片上外設,注意是片上的,也就是那塊我們肉眼所見的芯片里的外設。這位元帥足不出戶,便可操縱隊列,依靠的是自己強大的數字運算能力和強大的總線設計。在陣列中,數據的運算都呈報給元帥來做。

 

ICode總線

  陣列的運行需要有人下達指令,元帥Cortex-M3是命令的下發者,卻並非命令的產生者。那么命令從何而來?在《三體》中,馮諾依曼在布陣前早已想好了指令。同樣,各位STM32的熱愛者才是聰慧的命令發起者——我們寫好的程序被譯成機器指令存儲於Flash中。ICode總線就是一隊騎兵,將指令一條條送達給元帥Cortex-M3。

 

Bus-Matrix

  Bus-Matrix的功能是總線仲裁。類似於現在的快遞站,假如沒有快遞站作為中轉,一家快遞公司的送貨路線規划就變成了14億條。在陣列中,方陣Bus-Matrix作為中介,減少了騎兵隊的數量開銷,增加了系統的簡潔有序性,降低了信息傳輸的錯誤率。在圖中,Bus-Matrix右側安排了四支騎兵,他們送來的信息都被加以分類,而左側的四支騎兵則可以從屬於自己的類別中拿走信件,避免了錯拿的情況。這就是Bus-Matrix的作用之處。

 

DCode總線

  人如其名,騎兵隊DCode被用來傳送數據,這里的數據指程序中的常量和變量。常量存儲在Flash,變量和堆棧則存儲在SRAM。元帥Cortex-M3需要這些數據來作運算,中途還會讓騎兵隊DCode送些數據回去存儲。

 

System總線

  這個總線是被用來配置和訪問片上外設寄存器的。元帥Cortex-M3要調度眾多的外設方陣,所以專門設立了這樣一支騎兵隊。我們常說配啥啥寄存器,其實就是間接在給騎兵隊System發號施令呢!

 

DMA與DMA總線

  前面提到的三個騎兵隊都通向元帥的大營,Cortex-M喜歡用他們送來的數據做運算。但如果要有很多騎兵前來告訴他這份數據要送到某某處,那他會心力交瘁的,DMA的設立則緩解了元帥的這個壓力。STM32F103共有12個DMA通道,也就是12支機動部隊,它們活動的路線並非像前三支騎兵隊一樣固定。在圖中可以看到,外設方陣可以向機動部隊發送請求,DMA搬運數據時也不會去打擾元帥,這樣的部隊真是元帥的得力助手啊。而且DMA可以輕輕松松搬運大批量的數據,從不會耐煩,堪稱數據的搬運工。

 

FLASH

  馮諾依曼是個聰明人,早知道陣列模擬不會一次性成功。為了不用自己一次次重新頒布指令,就安排了名為Flash的將軍來記載指令和常量。Flash將軍是軍中記憶力最好的(我們知道程序下載到Flash里后是掉電不失去的)。

 

SRAM

  變量和堆棧記錄,為啥不能交給Flash一並做呢?這是因為Flash將軍雖然記憶好,但是手腳慢,而變量更改比較頻繁,讓他干這個不合適。代替他的就是SRAM方陣(我們都知道SRAM是掉電丟失的,但是數據讀寫真的很快)。

 

APB1和APB2總線:

  由騎兵隊AHB分出的兩隊騎兵APB1和APB2都是用來與片上外設進行交流的。之所以分成兩組,是因為他們發現所有的外設方陣中,有的方陣動作快,有的方陣慢手慢腳,於是將慢的一組交給馬速較慢的APB1,快的交給馬速較快的APB2。其中APB1最快的行軍速度為36MHz,APB2最快為72Mhz。

 

RCC:

  眾多的外設方陣,不用像元帥一樣每時每刻都得工作着。不工作的時候就得讓他們休息着,所以就出現了RCC校尉,用於管理外設方陣的作息(在32里,我們要使用某個片上外設,都得先開RCC使能)。

 

SDIO:

  Flash和SRAM的能力是有限的,而SD卡的容量很大,SDIO就是專門用來與SD卡溝通的接口。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM