STM32之記憶體分布與匯流排

2021-08-07 14:05:04 字數 3095 閱讀 9330

系統包括乙個由多個互相連線的32位ahb匯流排組成的矩陣

– cortex-m4 with fpu core i-bus, d-bus and s-bus

– dma1 memory bus

– dma2 memory bus

– dma2 peripheral bus

– ethernet dma bus

– usb otg hs dma bus

– internal flash memory icode bus

– internal flash memory dcode bus

– main internal sram1 (112 kb)

– auxiliary internal sram2 (16 kb)

– ahb1 peripherals including ahb to apb bridges and apb peripherals

– ahb2 peripherals

– fsmc

匯流排矩陣也能夠提供主到從的訪問,從而使能併發訪問,甚至在多個高速外設同時工作的時候也能夠高效工作. 64kbyte的ccm(core coupled memory)資料ram不是匯流排矩陣的一部分

,只能通過cpu來訪問.

匯流排結構圖:

在stm32中提供了兩個位帶操作域以及對應的位帶別名域

位帶操作域

位帶別名域

sram的低1m位元組 : 0x2000 0000~0x200f ffff

0x2200 0000~0x23ff fffc

外設的低1m位元組 : 0x4000 0000~0x400f ffff

0x4200 0000~0x43ff fffc

bit_word_addr =bit_band_base + (byte_offset x 32) + (bit_number × 4)
0x22006008 = 0x22000000 + (0x300*32) + (2*4)

/* 對0x22006008的讀寫就實現了對0x2000 0300處第2個bit的讀寫 */

/* 同理,若要對0x40000000位址塊進行位操作,需要把上面式子右邊的0x22000000換成0x42000000 */

以後我們想直接操作某個暫存器的某一位的時候,只需要找到這一位對應的別名位址,然後對別名位址進行讀寫即可實現對這一位的讀寫。如果想實現這中操作的話,只需要定義巨集即可,例如下面的:

#define register_bit_band(ofs, bit_num) (0x22000000 + (ofs << 5) + (bit_num << 2))

#define write_r_bit_band(ofs, bit_num, stat) (*((volatile unsigned int *)register_bit_band(ofs, bit_num)) = stat)

//上面兩個巨集可以實現對暫存器位帶域的操作

核心程式設計手冊給出的m系列4gb記憶體分布

我的板子啟動是在main flash memory,由前面的arm編譯工具一節可以知道**從0x08000000開始執行,這個也是由分散載入檔案指定的,也是板子上面main flash實際位址

-main

flash memory

-system memory

-embedded

sram1 (112

kb)-fsmc bank 1 (nor/psram

1and

2)

對映表為

對映到0x00000000位址處的記憶體塊可以由syscfg控制器的(syscfg_memrmp)暫存器低二位決定,如下表所示

bit1

bit0

memory selected00

0110

11可以看出來從main flash啟動的時候flash memory會被重新對映到0位址開始處,大小為1mb

,但是我的板子依然是從0x08000000位址處執行**的,現在由表中資料可以看出來從0位址開始執行也是可以的,可能是為了適應不同的啟動方式,所以才從0x08000000位址處開始執行系統**的。

低電量模式

vos 在 pwr_cr 暫存器的 bit15 位被設定

當 vos = 『0』, fhclk 最大為 144 mhz. 

當 vos = 『1』, fhclk 最大為 168 mhz.

等待週期指的是cpu訪問flash的等待時間,cpu訪問flash的週期就是等待週期加上1,這個與flash的硬體效能有關

STM32之記憶體

記憶體的分類 1 動態記憶體 dram。為什麼稱之為動態記憶體呢?是與他的硬體構成有關。動態隨機儲存器dram 的記憶體單元是以電容的電荷來表示資料。有電荷表示1,無電荷表示0,但是隨著時間的推移,代表1的電荷會放電,代表0的電荷會吸收電荷,因此它需要定期重新整理,所以就有了動態記憶體之稱。重新整理...

STM32的匯流排AMBA AHB APB

一 匯流排的簡單介紹 處理器無疑是計算機中最重要的部件,但並不是唯一的部件。一台計算機也需要隨機訪問儲存器 ram 來存放機器碼指令以便讓處理器執行。計算機還必須有一些方法使這些指令進入ram 輸入裝置 以及一些方法使程式執行結果得以看見 輸出裝置 ram是易失性的,當斷電時,它的內容就會丟失。所以...

STM32匯流排架構筆記

amba是一種soc system of chip 匯流排標準,有amba1.0 2.0 3.0標準。利用amba定義的一款匯流排架構 ahb advanced high performance bus 高階高效能匯流排 asb advanced system bus 高階系統匯流排 apb adv...