STM32芯片的內(nèi)部架構(gòu)介紹
STM32芯片由內(nèi)核和片上外設(shè)兩部分組成。STM32F103采用Cortex-M3內(nèi)核,該內(nèi)核由ARM公司設(shè)計(jì)。芯片生產(chǎn)廠商ST則負(fù)責(zé)在內(nèi)核之外設(shè)計(jì)部件并生產(chǎn)整個(gè)芯片。這些內(nèi)核之外的部件被稱為核外外設(shè)或片上外設(shè),如GPIO、USART(串口)、I2C、SPI等。
芯片內(nèi)核與外設(shè)之間通過各種總線連接,其中驅(qū)動(dòng)單元有四個(gè),被動(dòng)單元也有四個(gè)。可以將驅(qū)動(dòng)單元理解成內(nèi)核部分,被動(dòng)單元理解成外設(shè)。
ICode總線
ICode總線是專門用于取指令的總線,其中的“I”代表“Instruction”(指令)。在編寫程序后,經(jīng)過編譯,程序?qū)⑥D(zhuǎn)化為一條條指令并存儲(chǔ)在FLASH中。內(nèi)核通過ICode總線讀取這些指令,進(jìn)而執(zhí)行程序。
DCode總線
DCode總線用于取數(shù),其中的“D”代表“Data”(數(shù)據(jù))。在編寫程序時(shí),數(shù)據(jù)分為常量和變量兩種。常量是不變的,使用C語言中的const關(guān)鍵字進(jìn)行修飾,并存儲(chǔ)在內(nèi)部FLASH中。變量是可變的,無論是全局變量還是局部變量,都存儲(chǔ)在內(nèi)部的SRAM中。
System總線
我們通常所說的寄存器編程,即讀寫寄存器的操作,都是通過System總線來完成的。System總線主要用于訪問外設(shè)的寄存器。
DMA總線
DMA總線也主要用于傳輸數(shù)據(jù),這些數(shù)據(jù)可以來自某個(gè)外設(shè)的數(shù)據(jù)寄存器,也可以來自SRAM或內(nèi)部FLASH。
由于數(shù)據(jù)既可以被DCode總線訪問,也可以被DMA總線訪問,因此為了避免訪問沖突,取數(shù)時(shí)需要經(jīng)過一個(gè)總線矩陣進(jìn)行仲裁,以決定由哪個(gè)總線進(jìn)行取數(shù)。
內(nèi)部的閃存存儲(chǔ)器Flash
內(nèi)部的閃存存儲(chǔ)器即為FLASH,它用于存儲(chǔ)編寫好的程序。內(nèi)核通過ICode總線來獲取存儲(chǔ)器中的指令。
內(nèi)部的SRAM
內(nèi)部的SRAM,也被稱為內(nèi)存,是程序中變量、堆棧等開銷的存儲(chǔ)基礎(chǔ)。內(nèi)核通過DCode總線來訪問SRAM。
FSMC
FSMC的英文全稱是Flexible static memory controller(靈活的靜態(tài)的存儲(chǔ)器控制器)。通過FSMC,可以擴(kuò)展內(nèi)部存儲(chǔ)器,如外部的SRAM、NAND-FLASH和NORFLASH。但是,F(xiàn)SMC只能擴(kuò)展靜態(tài)的內(nèi)存,而不能擴(kuò)展動(dòng)態(tài)的內(nèi)存,因此不能用于擴(kuò)展SDRAM。
AHB
從AHB總線延伸出的兩條APB2和APB1總線是常見的總線,它們連接了GPIO、串口、I2C、SPI等外設(shè)。學(xué)習(xí)STM32的重點(diǎn)在于學(xué)會(huì)對這些外設(shè)進(jìn)行編程,以便驅(qū)動(dòng)外部的各種設(shè)備。
編輯:xiaoYing 最后修改時(shí)間:2023-08-22