STM32F429位帶操作

2021-10-08 08:16:58 字數 2121 閱讀 9618

stm32的m3和m4晶元支援位帶操作。那什麼是位帶操作呢?位帶操作就是可以單獨的對乙個位(bit)進行讀寫操作。咦?這麼一說好像有種似曾相識的感覺,在**見過呢?沒錯,是c51。在c51中操作io口是不是很方便,直接操作某一位就ok了。而在stm32中我們往往需要操作的是整個暫存器,讀,修改,寫。繁瑣的很。當時剛接觸的時候確實有點不習慣,時間長了也習慣了,直到有一天有人告訴我說也可以像51那樣類似操作。納尼?到底行不行呢?下面我們一**竟吧。

我是在stm32f429上測試的,所以就以f429為例介紹了。

什麼是位帶操作?

位帶操作就是可以單獨的對乙個位(bit)進行讀寫操作。

什麼是位帶區?

支援位帶操作的區域(貌似是一句廢話)。支援位帶操作的區域包括sram前1mbyte空間和片上外設前1mbyte空間。

什麼是位帶別名區?

位帶中的每乙個bit都會膨脹成乙個32位的位址空間。膨脹以後的位址空間就叫做位帶別名區。也就是說位帶區中的每乙個bit都會與位帶別名區的位址建立對映關係。對位帶別名區的讀寫就可以間接的實現對位帶區的讀寫。

sram位帶區的空間是前1mbyte,即0x20000000~0x200fffff

因為每乙個bit都會膨脹成乙個32位的字,所以對映關係如下

0x20000000記憶體單元的bit0對映到了0x22000000

0x20000000記憶體單元的bit1對映到了0x22000004

0x20000000記憶體單元的bit2對映到了0x22000008

0x20000000記憶體單元的bit7對映到了0x2200001c

在cortex-m3中用兩幅圖來說明了對映關係。

下面是對映公式:

說了這麼多,大概也明白了,我們驗證一下:

uint32_t sram __attribute__((at(

0x20002000)))

;//定義變數sram 到 0x20002000位址處

uint32_t *psram =

(uint32_t *)

(0x22000000 + ((

0x20002000

-0x20000000)*

32)+(

0*4))

;

定義乙個變數sram到sram中,讓編譯器把變數分配到8k位元組處。

再定義乙個指標型別的變數,通過公式計算出膨脹後的位址空間,將計算出的值強制轉換為乙個uint32_t *型別的指標。

我們修改psram指標變數所指空間的值,再觀察sram變數是否變化。

while(1)

結果證明是可以的,如下圖

下面是cortex-m3權威指南中的一段話

總之就是最低位有效。

sram位帶區驗證完了,我們去看看外設位帶區。

外設位帶區我們就用gpio來測試吧。選用gpiob的bit1埠。

外設位帶區的對映公式如下

根據公式直接套進來

while(1)

小燈閃爍了。

外設位帶區原理和sram位帶區原理一致。這裡就不多嗶嗶了。

STM32F429除錯記錄(一)

stm32f429的晶元有兩路can介面 四路串列埠 內部乙太網以及內部dsp處理器等硬體,硬體的豐富程度可見一斑,而且主頻達到180mhz,雖然比a8 a9架構的arm晶元還是差一大截,但是在工業控制上的應用還是比較多的。在程式編寫方面stm32f4系列不管在mdk還是庫函式都有挺大改動,剛著手除...

STM32F429 如何使用SDRAM

關於stm32f429 控制sdram fmc 擴充套件外部sdram 1 原理介紹 為什麼是fmc 不是 fsmc 區別在那裡!stm32f429使用fmc外設來管理擴充套件的儲存器,fmc是flexible memory controller的縮寫,譯為可變儲存控制器。它可以用於驅動包括sram...

STM32F429 如何使用NAND Flash

1 原理介紹 flash即是儲存晶元的一種,其結合了rom和ram的特點,既具備電可擦除程式設計的效能,又可以快速讀取資料,資料不會因斷電丟失。目前市面上flash主要有nor flash和nand flash。nor flash具有隨機訪問和隨位元組執行寫操作的能力,即可以訪問到儲存器內部的任意乙...