前言
許多像我一樣的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卡溝通的介面,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/89998.html
標籤:其他
下一篇:聯通戰略規劃與行動規劃實踐
