存儲器組織
Stm32F103的程序存儲器、數據存儲器、寄存器和輸入輸出端口被組織在同一個4GB的線性地址空間內,數據以小端格式存放在存儲器中。
嵌入式SRAM
STM32F10xxx內置64K字節的靜態SRAM。它可以以字節、半字(16位)或全字(32位)訪問。SRAM的起始地址是0x2000 0000。
位段
Cortex™-M3存儲器映像包括兩個位段(bit-band)區。這兩個位段區將別名存儲器區中的每個字映射到位段存儲器區的一個位,在別名存儲區寫入一個字具有對位段區的目標位執行讀-改-寫操作的相同效果。
簡單的理解就是在4GB的線性地址中是有2段虛擬地址A段、B段,指向同一段物理地址。
下面的映射公式給出了別名區中的每個字是如何對應位帶區的相應位的:
bit_word_addr = bit_band_base + (byte_offset×32) + (bit_number×4) 其中:
- bit_word_addr是別名存儲器區中字的地址,它映射到某個目標位。
- bit_band_base是別名區的起始地址。
- byte_offset是包含目標位的字節在位段裡的序號。
- bit_number是目標位所在位置(0-31)。
舉個例子
如果要對SRAM地址為0x20000300的字節中的位2進行操作,有兩種方式
1、 直接對SRAM地址為0x20000300的字節中的位2進行操作
2、 對0x22006008 = 0x22000000 + (0x300×32) + (2×4)對地址的寫操作與對SRAM中地址0x20000300字節的位2執行讀-改-寫操作有著相同的效果。
嵌入式閃存
閃存存儲器由主存儲塊和信息塊組成,信息塊又包括系統存儲器和選擇字節,系統存儲器中存儲著自舉程序。
閃存的指令和數據訪問是通過AHB總線完成的。預取模塊是用於通過ICode總線讀取指令的。仲裁是作用在閃存接口,並且DCode總線上的數據訪問優先。 讀訪問可以有以下配置選項:
- 等待時間:可以隨時更改的用於讀取操作的等待狀態的數量。
- 預取緩衝區(2個64位):在每一次復位以後被自動打開,由於每個緩衝區的大小(64位)與閃存的帶寬相同,因此只通過需一次讀閃存的操作即可更新整個緩衝區的內容。由於預取緩衝區的存在,CPU可以工作在更高的主頻。CPU每次取指最多為32位的字,取一條指令時,下一條指令已經在緩衝區中等待。
- 半週期:用於功耗優化。
啟動配置
在STM32F10xxx裡,可以通過BOOT[1:0]引腳選擇三種不同啟動模式。
內嵌的自舉程序
內嵌的自舉程序存放在系統存儲區,由ST公司在生產線上寫入,用於通過可用的串行接口對閃存存儲器進行重新編程。
閱讀更多 毅博編程 的文章