STM32架構(gòu)相關(guān)
整理了一下STM32相關(guān)的底層結(jié)構(gòu),有助于消化理解
先上幾張圖片(主要參照STM3210x系列)
1.芯片結(jié)構(gòu)組成圖:
?
2.STM32內(nèi)部結(jié)構(gòu):
?
3.Cortex-M3模塊結(jié)構(gòu)圖:
?
4.STM3210X內(nèi)部結(jié)構(gòu):
橋:
四個(gè)主動(dòng)單元 : ? ? ? ? M3內(nèi)核的ICode總線(I-bus)、DCode總線(D-bus)、?系統(tǒng)總線(S-bus)、DMA(DMA1、DMA2、以太網(wǎng)DMA)? ? 四個(gè)被動(dòng)單元?: ? ? ? ? 內(nèi)部SRAM、內(nèi)部閃存、FSMC、AHB到APB橋? ? ICode總線 : ? ? ? ??將M3內(nèi)核的指令總線與FLASH指令接口相連,用于指令預(yù)取 ? DCode總線: ? ? ? ? 將M3內(nèi)核的數(shù)據(jù)總線與FLASH數(shù)據(jù)接口相連,常量加載和調(diào)試? ? 系統(tǒng)總線 : ? ? ? ? 將M3內(nèi)核的系統(tǒng)總線與總線矩陣相連,協(xié)調(diào)內(nèi)核與DMA訪問? ? DMA總線:? ? ? ? ??將DMA的AHB主控接口與總線矩陣相連,協(xié)調(diào)CPU的DCode和DMA到SRAM、閃存、外設(shè)的訪問 ? 總線矩陣: ? ? ? ??協(xié)調(diào)內(nèi)核系統(tǒng)總線和DMA主控總線間的訪問仲裁,仲裁采用輪換算法 ? ? ? ? 包含DCode、系統(tǒng)總線、DMA1和DMA2總線、被動(dòng)單元? ? AHB到APB橋 : ? ? ? ??兩個(gè)AHB/APB橋在AHB和兩個(gè)APB總線間提供同步連接 ? ? ? ??APB1速度限于36MHz,APB2全速最高72MHz
?
一、時(shí)鐘結(jié)構(gòu)(時(shí)鐘和復(fù)位模塊,如參考上半部分所示)
系統(tǒng)復(fù)位后,所有外設(shè)全部關(guān)閉,但?SRAM?和?FLASH接口(FLITF)除外。 使用外設(shè)之前需打開該外設(shè)時(shí)鐘,設(shè)置?RCC——AHBENR?寄存器?。? ? 二、存儲(chǔ)結(jié)構(gòu) :(參考上半部分) *存儲(chǔ)組織: ? ? ? ??Cortex-M3的存儲(chǔ)系統(tǒng)采用統(tǒng)一編址方式,小端方式?4GB?的線性地址空間內(nèi), 尋址空間被分成?8?個(gè)主塊 block0-block7 ,每塊512MB。 ? ? ? ? ??片內(nèi)Flash: 從?0x00000000開始(嚴(yán)格來講是從0x08000000開始,到0x0800x xxxx結(jié)束,程序就燒到里面。) ? ? ? ??片內(nèi)SRAM:從?0x20000000開始(用來保存程序運(yùn)行時(shí)產(chǎn)生的臨時(shí)數(shù)據(jù)的隨機(jī)存儲(chǔ)器,運(yùn)行時(shí)變量,堆棧的存放的地方) ? ? ? ??包括:? ? ? ? ? ? ? ? ? 代碼空間? ? ? ? ? ? ? ? ? 數(shù)據(jù)空間? ? ? ? ? ? ? ? ? 位段、位段別名? ? ? ? ? ? ? ? ? 寄存器? ? ? ? ? ? ? ? ? 片上外設(shè)? ? ? ? ? ? ? ? ? 外部存儲(chǔ)器? ? ? ? ? ? ? ? ? 外部外設(shè) ? ? ??拓展延伸:e2prom ,存儲(chǔ)掉電需要保存的數(shù)據(jù);fsmc總線還可以擴(kuò)展nor 和nand;?? *FLASH: 由?Main?Block?和?Information?Block組成 ? ? ? ? ? ??Main?Block:
? ? ? ? ? ??存放用戶程序,最高512KB? ? ? ? ? ? ? 地址范圍:0x0800?0000?–?0x0807?FFFF? ? ? ? ? ? ? 小容量:16K-32K,最大4Kx64bit,共32x1K頁(yè) ? ? ? ? ? ? 中容量:64K-128K,最大16Kx64bit,共128x1K頁(yè)? ? ? ? ? ? ? 大容量:256K-512K,最大64Kx64bit,共256x2K頁(yè)? ? ? ? ? ? ? 小容量:16K-32K,最大4Kx64bit,共32x1K頁(yè)? ? ? ? ? ? ? 互聯(lián)型:最大32Kx64bit,共128x2K頁(yè)
? ? ? ? ? ? ?Information?Block:
? ? ? ? ?System?Memory?2KB:0x1FFF?F000?–?0x1FFF?F7FF?ISP?Bootloader程序? ? ? ? ? ?Option?Bytes?16B:0x1FFF?F800?–?0x1FFF?F80F
? *SRAM:? ? ? ? ??最大64KB? ? ? ? ? 地址范圍:0x2000?0000?–?0x2000?FFFF ? *片上外設(shè)地址映射:?? *位段(bit-band)、位段別名 : ? M3存儲(chǔ)空間中包括兩個(gè)位段區(qū),該區(qū)域即可字操作,又可位操作 ? ? ? ? ? ? SRAM最低1MB空間: 0x2000?0000?–?0x200F?FFFF? ? ? ? ? ? ? 外設(shè)最低1MB空間:0x4000?0000?–?0x400F?FFFF? ? a.為方便位段區(qū)的操作,安排了兩個(gè)32M的位段別名區(qū) ? b.位段區(qū)中每一位?映射?位段別名區(qū)中的一個(gè)字 ? c.通過對(duì)別名區(qū)中某個(gè)字的讀寫操作,可以實(shí)現(xiàn)對(duì)位段區(qū)中某一位的讀寫操作 ?? ?別名區(qū),2個(gè)32MB: ? ? ? ??SRAM:0x2200?0000?–?0x21FF?FFFF? ? ? ? ??外設(shè):0x4200?0000?–?0x41FF?FFFF ? 位段別名區(qū)中的字與位段區(qū)的位映射公式: ? ? bit_word_addr?= ?bit_band_base +?(byte_offset?x?32) +?bit_number?x?4 ? ??例如:SRAM位段區(qū)中地址0x20000300字節(jié)中位2 ? ? ? ? ? ??0x22006008?= 0x22000000 +?(0x300?x?32) +?(2?x?4) ? ?? ? ??對(duì)別名區(qū)中某個(gè)字進(jìn)行寫操作:該字的第?0?位將影響位段區(qū)中對(duì)應(yīng)的位 ? ??對(duì)別名區(qū)中某個(gè)字進(jìn)行讀操作:若位段區(qū)中對(duì)應(yīng)的位為?0?則讀的結(jié)果為?0x0 ,若位段區(qū)中對(duì)應(yīng)的位為?1?則讀的結(jié)果為?0x1 ? ? PS:?對(duì)別名區(qū)的讀寫可以實(shí)現(xiàn)對(duì)位段區(qū)中每一位的原子操作,而且僅只需要一條指令即可實(shí)現(xiàn) ?? *啟動(dòng)模式?: ? ? ? ??STM32系統(tǒng)啟動(dòng)區(qū):0x0000?0000?–?0x0007?FFFF,512KB ? ? ? ??系統(tǒng)啟動(dòng)之后:?CPU從位于0x0000?0000地址處的啟動(dòng)區(qū)開始執(zhí)行代碼 ??? ? ??該區(qū)實(shí)際既無FLASH,也無SRAM,通過引導(dǎo)配置后,將實(shí)際引導(dǎo)區(qū)映射到啟動(dòng)區(qū) ? ? ? ??系統(tǒng)復(fù)位后,在SYSCLK第4個(gè)上升沿,BOOT管腳的狀態(tài)被保存,用戶通過設(shè)置BOOT1,BOOT0的引腳狀態(tài)選擇啟動(dòng)模式 ? ? ? ??CPU從位于0x0000?0000地址處的啟動(dòng)區(qū)開始執(zhí)行代碼 ? ? ? ? ? ? ? ???0x0000?0000?實(shí)際是SP? ? ? ? ? ? ? ? ???0x0000?0004?是執(zhí)行代碼的地址 ? ? ? ? ?即使被映射到啟動(dòng)區(qū),仍然可以在原存儲(chǔ)空間訪問相關(guān)存儲(chǔ)器? ? ? ? ? ? ? ?從待機(jī)模式退出后,BOOT引腳狀態(tài)被重新保存,待機(jī)時(shí),BOOT管腳需保持 ?? ? ?STM32F10x通過配置?BOOT[1:0]引腳選擇三種不同啟動(dòng)模式? 三、片上外設(shè) STM32F10x外設(shè)
?
?
STM32F103xx增強(qiáng)型大容量外設(shè)
?
四、GPIO結(jié)構(gòu)
共?(5) x?16個(gè)I/O口:?
PA0?~?PA15? PB0?~?PB15? PC0?~?PC15? PD0?~?PD15? PE0?~?PE15
3.3V與5V兼容:
PA8?~?PA15? PB2?~?PB4、?PB6?~PB15 PC6?~?PC12? PD0?~?PD15? PE0?~?PE15
僅支持3.3V:
PA0?~?PA7,兼做?ADC_IN0?~?ADC_IN7? PB0?~?PB1,兼做?ADC_IN8?~?ADC_IN9 PB5? PC0?~?PC5,兼做?ADC_IN10?~?ADC_IN15? PC13?~?PC15
引腳 (48 64 ?...) 開發(fā)工具?
?
STM32系列的優(yōu)點(diǎn)
? ?先進(jìn)的內(nèi)核結(jié)構(gòu),STM32系列使用了ARM最新的、先進(jìn)架構(gòu)Cortex-M3內(nèi)核 ? ? ? ? ? ?優(yōu)秀的功耗控制,STM32處理器具有三種低功耗模式 ? ? ? ? ? ? ? ? ? ?運(yùn)行模式時(shí)使用高效的動(dòng)態(tài)耗電機(jī)制,在Flash中以72MHz全速運(yùn)行時(shí),如果開啟外部時(shí)鐘,處理器僅耗電27mA? ? ? ? ? ? ? ? ? ? ? 待機(jī)狀態(tài)時(shí)極低耗電,典型值2uA? ? ? ? ? ? ? ? ? ? ? 電池供電時(shí),提供低電壓2.0~3.6V工作能力 ? ? ? ? ? ?靈活的時(shí)鐘控制機(jī)制,用戶可以根據(jù)自己所需的耗電/性能要求進(jìn)行合理優(yōu)化 ? ? ? ? ? ?RTC可獨(dú)立供電,外接紐扣電池供電
?
??性能出眾而且功能創(chuàng)新的片上外設(shè) ? ? ? ??STM32?處理器片上外設(shè)的優(yōu)勢(shì)來源于雙?APB?總線結(jié)構(gòu) ? ? ? ??其中有一個(gè)高速?APB,速度可達(dá)CPU?的運(yùn)行頻率,連接到該總線上的外設(shè)能以更高的速度運(yùn)行 ? ? ? ? ? ? ? ??USB:???12Mbit/s????????? ? ? ? ? ? ? ? ? USART:??4.5Mbit/s? ? ? ? ? ? ? ? ? PI:???18Mbit/s ? ? ?? ? ? ? ? ? ? ? ? IIC:????400kHz? ? ? ? ? ? ? ? ? GPIO:??18MHz翻轉(zhuǎn) ? ? ?? ? ? ? ? ? ? ? ? PWM:????定時(shí)器72MHz輸入 ? ? ? ? ?針對(duì)?MCU?應(yīng)用中最常見的電機(jī)控制,STM32?對(duì)片上外圍設(shè)備進(jìn)行一些功能創(chuàng)新 ? ? ? ? ? ? ? ? ?內(nèi)嵌適合三相無刷電機(jī)控制的定時(shí)器和ADC ? ? ? ? ? ? ? ? ?高級(jí)PWM定時(shí)器提供: ? ? ? ? ? ? ? ? ? ? ? ? ?6路PWM輸出 ? ?-> 死去產(chǎn)生?????->?邊沿對(duì)齊和中心對(duì)齊波形? ? ? ? ? ? ? ? ? ? ? ? ? 編碼器輸入?????->?霍爾傳感器???->?完整的向量控制環(huán) 緊急故障停機(jī)、 ? ? ? ? ? ? ? ? ? ? ? ? 可與2路ADC同步、與其它定時(shí)器同步 可編程防范機(jī)制可用于防止對(duì)寄存器的非法寫入 ? ? ? ? ? ? ? ??雙通道ADC采樣/保持,12位1uS,連續(xù)/獨(dú)立模式,多觸發(fā)源 ? ? ? ? ? ? ? ??等等
?