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...