整理了一下STM32相關的底層結構,有助於消化理解
先上幾張圖片(主要參照STM3210x系列)
1.芯片結構組成圖:

2.STM32內部結構:

3.Cortex-M3模塊結構圖:

4.STM3210X內部結構:

橋:

四個主動單元 :
M3內核的ICode總線(I-bus)、DCode總線(D-bus)、 系統總線(S-bus)、DMA(DMA1、DMA2、以太網DMA)
四個被動單元 :
內部SRAM、內部閃存、FSMC、AHB到APB橋
ICode總線 :
將M3內核的指令總線與FLASH指令接口相連,用於指令預取
DCode總線:
將M3內核的數據總線與FLASH數據接口相連,常量加載和調試
系統總線 :
將M3內核的系統總線與總線矩陣相連,協調內核與DMA訪問
DMA總線:
將DMA的AHB主控接口與總線矩陣相連,協調CPU的DCode和DMA到SRAM、閃存、外設的訪問
總線矩陣:
協調內核系統總線和DMA主控總線間的訪問仲裁,仲裁采用輪換算法
包含DCode、系統總線、DMA1和DMA2總線、被動單元
AHB到APB橋 :
兩個AHB/APB橋在AHB和兩個APB總線間提供同步連接
APB1速度限於36MHz,APB2全速最高72MHz
一、時鍾結構(時鍾和復位模塊,如參考上半部分所示)
系統復位后,所有外設全部關閉,但 SRAM 和 FLASH接口(FLITF)除外。
使用外設之前需打開該外設時鍾,設置 RCC——AHBENR 寄存器 。
二、存儲結構 :(參考上半部分)
*存儲組織:
Cortex-M3的存儲系統采用統一編址方式,小端方式 4GB 的線性地址空間內,
尋址空間被分成 8 個主塊 block0-block7 ,每塊512MB。
片內Flash: 從 0x00000000開始(
嚴格
來講是從0x08000000開始,到0x0800x xxxx結束,程序就燒到里面。)
片內SRAM:從 0x20000000開始(
用來保存程序運行時產生的臨時數據的隨機存儲器,運行時變量,堆棧的存放的地方)
包括:
代碼空間
數據空間
位段、位段別名
寄存器
片上外設
外部存儲器
外部外設
拓展延伸:e2prom ,存儲掉電需要保存的數據;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頁互聯型:最大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
*片上外設地址映射:
*位段(bit-band)、位段別名 :
M3存儲空間中包括兩個位段區,該區域即可字操作,又可位操作
SRAM最低1MB空間: 0x2000 0000 – 0x200F FFFF
外設最低1MB空間:0x4000 0000 – 0x400F FFFF
a.為方便位段區的操作,安排了兩個32M的位段別名區
b.位段區中每一位 映射 位段別名區中的一個字
c.通過對別名區中某個字的讀寫操作,可以實現對位段區中某一位的讀寫操作
別名區,2個32MB:
SRAM:0x2200 0000 – 0x21FF FFFF
外設:0x4200 0000 – 0x41FF FFFF
位段別名區中的字與位段區的位映射公式:
bit_word_addr = bit_band_base + (byte_offset x 32) + bit_number x 4
例如:SRAM位段區中地址0x20000300字節中位2
0x22006008 = 0x22000000 + (0x300 x 32) + (2 x 4)
對別名區中某個字進行寫操作:該字的第 0 位將影響位段區中對應的位
對別名區中某個字進行讀操作:若位段區中對應的位為 0 則讀的結果為 0x0 ,若位段區中對應的位為 1 則讀的結果為 0x1
PS:
對別名區的讀寫可以實現對位段區中每一位的原子操作,而且僅只需要一條指令即可實現
*
啟動模式 :
STM32系統啟動區:0x0000 0000 – 0x0007 FFFF,512KB
系統啟動之后: CPU從位於0x0000 0000地址處的啟動區開始執行代碼
該區實際既無FLASH,也無SRAM,通過引導配置后,將實際引導區映射到啟動區
系統復位后,在SYSCLK第4個上升沿,BOOT管腳的狀態被保存,用戶通過設置BOOT1,BOOT0的引腳狀態選擇啟動模式
CPU從位於0x0000 0000地址處的啟動區開始執行代碼
0x0000 0000 實際是SP
0x0000 0004 是執行代碼的地址
即使被映射到啟動區,仍然可以在原存儲空間訪問相關存儲器
從待機模式退出后,BOOT引腳狀態被重新保存,待機時,BOOT管腳需保持
STM32F10x通過配置 BOOT[1:0]引腳選擇三種不同啟動模式
三、片上外設
STM32F10x外設

STM32F103xx增強型大容量外設

四、GPIO結構
共?(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 ...)
開發工具

STM32系列的優點
先進的內核結構,STM32系列使用了ARM最新的、先進架構Cortex-M3內核
優秀的功耗控制,STM32處理器具有三種低功耗模式
運行模式時使用高效的動態耗電機制,在Flash中以72MHz全速運行時,如果開啟外部時鍾,處理器僅耗電27mA
待機狀態時極低耗電,典型值2uA
電池供電時,提供低電壓2.0~3.6V工作能力
靈活的時鍾控制機制,用戶可以根據自己所需的耗電/性能要求進行合理優化
RTC可獨立供電,外接紐扣電池供電
性能出眾而且功能創新的片上外設
STM32 處理器片上外設的優勢來源於雙 APB 總線結構
其中有一個高速 APB,速度可達CPU 的運行頻率,連接到該總線上的外設能以更高的速度運行
USB: 12Mbit/s
USART: 4.5Mbit/s
PI: 18Mbit/s
IIC: 400kHz
GPIO: 18MHz翻轉
PWM: 定時器72MHz輸入
針對 MCU 應用中最常見的電機控制,STM32 對片上外圍設備進行一些功能創新
內嵌適合三相無刷電機控制的定時器和ADC
高級PWM定時器提供:
6路PWM輸出 -> 死去產生 -> 邊沿對齊和中心對齊波形
編碼器輸入 -> 霍爾傳感器 -> 完整的向量控制環 緊急故障停機、
可與2路ADC同步、與其它定時器同步 可編程防范機制可用於防止對寄存器的非法寫入
雙通道ADC采樣/保持,12位1uS,連續/獨立模式,多觸發源
等等
