stm32之GPIO暫存器學習

2022-08-31 14:24:24 字數 1617 閱讀 8492

gpio即通用輸入/輸出 (general purpose input output)

包括:兩個32位的配置暫存器 gpiox->crl,gpiox->crh

兩個32位的資料暫存器  gpiox->idr,gpiox->odr

乙個32位的 set/reset 暫存器  gpiox->bsrr

一位16位的 reset 暫存器 gpiox->brr

一位32位的鎖定暫存器  gpiox->lckr

埠的模式包括:

浮空輸入(input floating)—— 即沒有上拉電阻和下拉電阻,電壓呈不確定性,一般用來做adc輸入用,這樣可以減少上下拉電阻對結果的影響

上拉輸入(input pull-up)

下拉輸入(input-pull-down)

模擬輸入(analog)

開漏輸出(output open-drain)—— 輸出邏輯0,則n-mos啟用; 輸出邏輯1,埠處於高阻(電阻非常大,但不是斷路,此外,p-mos從未啟用)

推挽輸出(output push-pull)—— 輸出邏輯0,則n-mos啟用;輸出邏輯1,p-mos啟用

復用功能推挽輸出(alternate function push-pull)——片內外設功能(i2c的scl,sda)

復用功能開漏輸出(

alternate function open-drain

)——片內外設功能(usart的tx1,spi的mosi,miso,sck,ss)

復用開漏輸出、復用推挽輸出:可以理解為gpio口被用作第二功能時的配置情況(即並非作為通用io口使用)

注意:i / o埠暫存器被訪問為32位字(半字或位元組訪問是不允許的)

其餘具體的可以檢視stm3210x 手冊

gpiox->bsrr 低位埠配置暫存器(x = a~ g,該暫存器偏移位址為:0x10):0-15位——為1時,可以使odrx相應的位置1,為0時,無變化 。15-31位——為1時,可以使odrx相應的位清零,為0時,無變化(注:當set和reset都設定了,則set優先順序高)

注:用bsrr和brr去改變管腳狀態的時候,沒有被中斷打斷的風險,也就不需要關閉中斷

gpiox->lckr 埠配置鎖定暫存器(x = a~ g,該暫存器偏移位址為:0x18):用來鎖定對應位的埠位配置,當埠被鎖定時,不再有可能修改它的值,直到系統復位。每乙個鎖都凍結相應的4位控制暫存器(crl,crh)

例子:

1/*2

根據高8位的輸入電平來決定低8位的輸出電平3*/

45 gpioa->crl = 0x33333333; //

gpioa.0-gpio0.7 output push-pull 50mhz

6 gpioa->crh = 0x44444444; //

gpioa.8-gpioa.15 input floating78

while(1)9

野火STM32暫存器配置GPIO

1 讀庫函式的一些巨集定義和結構體 define io voiatile typedef unsigned int uint32 t typedef unsigned shrot uint16 t 以結構體的形式定義好了外設暫存器後,使用結構體前還需要給結構體的首位址賦值,才能訪問到需要的暫存器 e...

STM32之暫存器開發

首先克服心理作用,不要總是預設暫存器開發難,其實暫存器開發和庫函式開發所用的方法和難度是一樣的,並不難,下面用以stm32為例解釋。1.明確自己需要的功能 庫函式開發也需要 2.檢視手冊,找到功能對應的微控制器資源 3.找到功能所需暫存器 庫函式開發需要找到相應的功能函式 4.根據位址每位對應的功能...

STM32之暫存器訪問

一般的暫存器訪問需要通過讀 改 寫三步曲和位運算的清0置1來實現,但在stm32的程式設計中,通過利用它的一些優秀的特性如埠位設定 復位寄存bsrr 位繫結等,我們可以大大提公升暫存器的訪問速度和簡化暫存器的操作。一般暫存器操作 gpiox odr 0x10 pin4置1 gpiox odr 0x1...