stm32位段操作SRAM

2021-09-25 03:02:56 字數 1014 閱讀 8440

三個寫得很好的教程

乙個小例子

#include

"stm32f10x.h"

#define bitband(addr, bitnum) ((addr & 0xf0000000)+0x2000000+((addr &0xfffff)<<5)+(bitnum<<2))

//將實際位址對映為別名區位址

//由於後面定義的a為u8變數,0≤bitnum≤7

#define mem_addr(addr) *((volatile unsigned long *)(addr))

#define bit_addr(addr, bitnum) mem_addr(bitband(addr, bitnum))

//這三步在第三篇教程中有詳細說明

u8 a ;

//如果直接指定a在sram中位址則這樣寫u8 a @0x20000100(iar環境);

//0x2000 0000‐0x200f ffff(sram 區中的最低1mb支援位帶操作)

intmain

(void

)}

驗證方法:

將板子接上後燒入程式,在i++行設定斷點,然後在變數a上右鍵——add to watch:『a』,就可以在watch視窗觀察每一次迴圈a的變化值,可以看見從0x00——0x01——……——0xff後跳出迴圈。

理解:其實0x2000 0000到0x23ff ffff都是實際記憶體中的位址,只不過sram的0x2000 0000‐0x200f ffff(sram位段區)可以位帶操作——即對映到別名區0x2200 0000~0x23ff ffff,別名區中的每個字(32位)對應sram位段區的一位。

終於開始學著看一點點官方指南了,之前全看的原子哥的不完全手冊。

下次學乙個東西的時候試試stm32中文參考手冊——stm32韌體庫使用手冊的順序來學,自己去理解理解。

stm32的位操作

位繫結的區域 sram區 0x2000 0000 0x200f ffff 1mstm32的位帶操作簡單的說就是把乙個位址a的8個位,分別單獨的重新定義8個位址,操作乙個位址等同於操作乙個位,形象的理解即為取別名。sram 0x22000000 a 0x20000000 8 n 4 這裡的8表示8個位...

stm32位段和位段別名儲存區

才疏學淺,以下是我自己個人理解 乙個16進製制的位址對應乙個位元組 8bit stm32中每個暫存器是32bit,所以乙個暫存器就跨越了4個16進製制的位址,取了四個位址中最小的那個作為該暫存器的位址 就像下面的圖,總共有4個32位暫存器,每個暫存器跨越了4個位址。參考手冊中寫到 位段區將別名儲存器...

stm32之位帶操作

stm32相對於8位微控制cpu來說實在強大的不得了,依稀記得51控制i o空的時候是 sbit led1 p0 0 然而我們在32卻沒有想 sbit 類似的關鍵字進行i o的某位進行操作。於是引入了 位帶操作的概念 什麼事位帶操作?標準的定義是 通過訪問位帶別名區來實現,即通過將每個位元位膨脹成乙...