gpio—位帶操作
本章參考資料:《 stm32f4xx 中文參考手冊》儲存器和匯流排構架章節、 gpio 章節,
《 cortex®-m4 核心程式設計手冊》 2.2.5 bit-banding。學習本章時,配套這些參考資料學習效果
會更佳。
位操作就是可以單獨的對乙個位元位讀和寫,這個在 51 微控制器中非常常見。 51 單片
機中通過關鍵字 sbit 來實現位定義, f429 中沒有這樣的關鍵字,而是通過訪問位帶別名區
來實現。
在 f429 中,有兩個地方實現了位帶,乙個是 sram 區的最低 1mb 空間,另乙個是外
設區最低 1mb 空間。這兩個 1mb 的空間除了可以像正常的 ram 一樣操作外,他們還有
自己的位帶別名區,位帶別名區把這 1mb 的空間的每乙個位膨脹成乙個 32 位的字,當訪
問位帶別名區的這些字時,就可以達到訪問位帶區某個位元位的目的。
n這個位號,代表你想操作的位,比如
gpioh_pin_10
,此時n=10
;在零死角中寫的
0<=n<=8
有錯誤。
為什麼是低五位有效?因為位帶區的位址偏移最大0xfffff(
0x400 00000----0x400 fffff
);相減最大就這麼多,這樣可以巧妙地把兩個公式化成乙個。
stm32怎麼知道什麼時候是位帶操作的呢?因為硬體位址決定了晶元的功能,當你根據晶元的硬體設計,在對應位址操作的時候,就可以達到晶元設定的效果。
位帶操作 GPIO輸出和輸入
gpioc odr 0 2 匯流排操作,即操作整個暫存器.在51微控制器中 p0 0xfe 匯流排操作.sbit led1 p0 0 位操作,即操作暫存器中的某一位.led1 0 在stm32中並沒有sbit這樣的關鍵字.但是我們可以用位帶操作實現位操作.位帶操作 在 stm32 中,有兩個地方實現...
F3不能用位帶操作GPIO之原由
最近用到stm32f303,在修改io的時候,覺得用庫操作太麻煩了,要自己乙個乙個修改,用巨集定義也不解決,自然就會想到用位帶操作。查m4的手冊知道m4也是支援位帶操作,f3系列也是屬於m4核心,而且在405也是用位帶操作,覺得f303也是一樣可以做位帶操作。直接先修改乙個io,除錯卻發現在,io電...
stm32之位帶操作
stm32相對於8位微控制cpu來說實在強大的不得了,依稀記得51控制i o空的時候是 sbit led1 p0 0 然而我們在32卻沒有想 sbit 類似的關鍵字進行i o的某位進行操作。於是引入了 位帶操作的概念 什麼事位帶操作?標準的定義是 通過訪問位帶別名區來實現,即通過將每個位元位膨脹成乙...