stm32之位帶操作

2021-08-09 05:58:37 字數 1402 閱讀 2732

stm32相對於8位微控制cpu來說實在強大的不得了,依稀記得51控制i/o空的時候是:sbit led1 = p0^0;然而我們在32卻沒有想「sbit」類似的關鍵字進行i/o的某位進行操作。於是引入了「位帶操作的概念」,什麼事位帶操作???標準的定義是:通過訪問位帶別名區來實現,即通過將每個位元位膨脹成乙個32位字,當訪問這些字的時候就達到了訪問「位」的目的,這就是位帶操作!!!是不是很抽象?首先我們先看看暫存器的圖:

紅色箭頭位置表示:stm32支援位帶操作的區域是 sram 區的最低 1mb 範圍(apb1/2 ,ahb外設)和片內外設區的最低 1mb範圍。

我們以點亮一盞燈led為例,則查到暫存器,得知是gpioc,該位址c口的輸出暫存器位址是0x4001100c,屬於片內外區的範圍(0x40000000

~0x400ffffff),乙個gpio埠32為,如下圖所示:

上述所知,led的輸出控制暫存器的位址是

0x4001100c ,假設我們要訪問第2個led,則是gpioc^1引腳,也就是gpioc bit[1],

stm32訪問的最小單元是位址,所以無發訪問到gpioc bit[1],這個時候,我們要通過位帶訪問別名區來控制gpioc bit[1],,也就是起始地為

0x42000000 大小為32mb的單元。這時我們在想想概念,通過訪問位帶別名區來實現,即通過將每個位元位膨脹成乙個32位字,當訪問這

些字的時候就達到了訪問「位」的目的。所以我們理解為把位址為0x4001100c

的8個bit對映到位址

為0x42000000 大小為32mb的單元。並且每個bit擴充套件為32位,如圖所示:

總結:

1.為什沒不可以直接訪問位?

答:訪問的最小單元是「位元組」,而不是位,其中也沒有「sbit」類似的關鍵字,無法訪問到具體的位址裡的某個bit

2.怎麼解決?

說白了,就是把某危樓(片內外設區)的一家(乙個位址)8口人(8bit)搬到乙個另地方(位帶別名區),並且,每個人(每一位bit)住上了更大的房子(變成32bit)

STM32位帶操作詳細介紹

3.gpio位帶實現 在stm32中,如果我們要使pb0埠輸出低電平,可以用如下語句 gpiob odr 0 0 在51微控制器中我們是這樣的 p0 0xff 匯流排操作 還有一種方法 sbit led1 p0 0 led1 0 位操作 在stm32中能不能實現位操作呢,當然是可以的,這種方法我們叫...

STM32 Contex M的位帶操作

位帶操作的思想在30年前就已經有了,還是8051開創的先河。如今,contex m3將此能力進化,這裡的位帶操作位定址區威力大幅度增強。有兩個區中實現了位帶。其中乙個是 sram 區的最低 1mb 範圍,第二個則是片內外設區的最低 1mb 範圍。這兩個區中的位址除了可以像普通的 ram 一樣使用外,...

STM32 IO口位帶操作

m4中有4gb的訪問空間,訪問空間有兩個比較重要的位址,暫存器對映位址,又叫別名位址 範圍32mb 暫存器位址 範圍1mb,固定的 使用庫函式對io引腳操作比較費時間,需要進行現場保護和現場恢復操作,不能一步到位。使用位帶操作能夠一步到位,方便快捷。每個埠都有對應的暫存器位址,檢視庫函式可以看到對暫...