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





