STM32位帶解析
本人最近根據正點原子的視頻自學STM32,在學習STM32的的位帶操作操作時,只是介紹到了位帶別名區把位帶區的每一個比特位膨脹成32位的字,即位帶區的每一個比特位對應位帶別名區中一個4個字節大小的地址。下圖示例SRAM區中的最低1MB的位帶區與位帶別名區的膨脹對應關係:
轉換公式
對於我這種初學者來說,我會想知道具體怎麼去計算,但是又對位操作比較陌生,所以特地的去查了一下怎麼去做計算,並記錄下來,希望能給同樣是初學者帶來幫助,以0x200FFFFF爲例:
1.A = 0x200FFFFF
2.A - 0x20000000 = 0xFFFFF
3.(A - 0x20000000) * 32 = 0xFFFFF *32 = 0x1FFFFE0
由於32 = 2^5; 所以相當於0xFFFFF向左移5位,即爲0x1FFFFE0;
4.假設
n = 0;
AliasAddr = 0x22000000 + 0x1FFFE0 + 0x00 = 0x23FFFFE0
n = 1;
AliasAddr = 0x22000000 + 0x1FFFE0 + 0x04 = 0x23FFFFE4
…
…
n = 7; (4*7 = 28 = 0x1C)
AliasAddr = 0x22000000 + 0x1FFFE0 + 0x1C = 0x23FFFFFC
注:
0xFFFFF = 1111 1111 1111 1111 1111 左移5位得到
0001 1111 1111 1111 1111 1110 0000 = 0x1FFFFE0