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具有隨機訪問和隨位元組執行寫操作的能力,即可以訪問到儲存器內部的任意乙...