STM32 GPIO 相關暫存器

2021-05-28 12:53:58 字數 1255 閱讀 6959

每個gpio埠有兩個32位配置暫存器(gpiox_crl,gpiox_crh)分別控制每個埠的高八位和低八位,如果io口是0-7號的話,則寫crl暫存器,如果io口是8-15號的話,則寫crh暫存器,兩個32位資料暫存器(gpiox_idr,gpiox_odr)乙個是唯讀作輸入資料暫存器,乙個是只寫作輸出暫存器,乙個32位置位/復位暫存器(gpiox_bsrr),乙個16位復位暫存器(gpiox_brr)和乙個32位鎖定暫存器(gpiox_lckr)。常用的io埠暫存器只有四個:crh,crl,idr,odr

資料手冊中列出的每個i/o埠的特定硬體特徵, gpio埠的每個位可以由軟體分別配置成多種模式。每個i/o埠位可以自由程式設計,然而i/0埠暫存器必須按32位字被訪問(不允許半字或位元組訪問)。

另外,stm32的每個埠使用前都要將其時鐘使能,stm32的gpio的時鐘統一掛接在apb2上,具體的使能暫存器為rcc_apb2enr,該暫存器的第2位到第8位分別控制gpiox(x=a,b,c,d,e,f,g)埠的時鐘使能,當外設時鐘沒有啟用時,程式不能讀出外設暫存器的數值,如開啟

porta時鐘:

rcc->apb2enr|=1<<2;    //使能porta時鐘

使能外設時鐘後,gpioa的十六位就可以按照設定的狀態工作了,之後就是具體設定哪一位了以第八位為例即高位的首位,在gpiox_crh暫存器中進行設定,gpioa的每一位都有該暫存器的四位來設定相應的引數,這四位中的高兩位(cnf0,cnf1)設定gpio的輸入輸出模式,低兩位(mode0,mode1)是設定gpio的輸出頻率,具體可以參考stm32參考手冊。

gpioa->crh&=0xfffffff0;//清掉pa8原來的設定,同時遮蔽其它埠,不影響其它埠的設定

gpioa->crh|=0x00000003;//pa8 推挽輸出

十六進製制中的3 換成二進位制 00 11 前兩位00表示推挽輸出,11代表輸出頻率50mhz,若crh|=0x4,表示模擬輸入模式(adc用),0x3表示推挽輸出模式(作輸出口用,50m速率),0x8表示上/下拉輸入模式(做輸入口用),0xb表示復用輸出(使用io口的第二功能,50m速率)。

這是對一位的操作,當然也可以多位操作,因為stm32對gpio操作必須是32位全字操作,設定完成後gpioa的第8位就可以使用了 之後給gpioa->odr=0x ***x ***x送資料就行了

STM32 GPIO 相關暫存器

每個gpio埠有兩個32位配置暫存器 gpiox crl,gpiox crh 分別控制每個埠的高八位和低八位,如果io口是0 7號的話,則寫crl暫存器,如果io口是8 15號的話,則寫crh暫存器,兩個32位資料暫存器 gpiox idr,gpiox odr 乙個是唯讀作輸入資料暫存器,乙個是只寫...

STM32 GPIO相關知識

目錄 一 gpio基礎知識 1 總體介紹 2 詳細介紹 1 4種輸入模式 2 4種輸出模式 4種輸入模式 4種輸出模式 3種最大輸出速度 輸入浮空 浮空,顧名思義就是浮在空中,既沒有什麼把它拉上去,也沒有什麼把它拉下去。浮空最大的特點就是電壓的不確定性,它可能是0v,也可能是vcc,還可能是介於兩者...

野火STM32暫存器配置GPIO

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