STM32的GPIO管腳有下面8種可能的配置:(4輸入 +2 輸出 +2 復用輸出)
(1)浮空輸入_IN_FLOATING
? ? ? ? 在上圖上,陰影的部分處于不工作狀態,尤其是下半部分的輸出電路,實際上是與端口處于隔離狀態。黃色的高亮部分顯示了數據傳輸通道,外部的電平信號通過左邊編號1的I/0 端口進入STM32,經過編號2的施密特觸發器的整形送入編號3的“輸入數據寄存器”,在“輸入數據寄存器”的另一端(編號4),CPU可以隨時讀出1/0 端口的電平狀態
(2)帶上拉輸入_ IPU??
上拉電阻30k-50k起抗干擾作用。?
(3)帶下拉輸入_IPD

(4)模擬輸入_AIN

(5)開漏輸出_OUT_OD

(6)開漏復用輸出_AF_OD

(7)推挽輸出_OUT_PP

(8)推挽復用輸出_AF_PP?
? ? ? STM32的每個 I0端口都有7個寄存器來控制。他們分別是:配置模式的2 個32 位的端口配置寄存器CRL和CRH; 2個32 位的數據寄存器IDR 和ODR;1個32 位的置位/復位寄存器BSRR;1個 16位的復位寄存器 BRR;1個32位的所存寄存器LCKR;常用的I0端口寄存器只有4個:CRL、CRH、IDR、ODR?。
32 位的端口配置寄存器CRL和CRH
寄存器復位值為0x44444444,CRL控制的是低8位輸出口,CRH控制的是高8位輸出口。
0X4表示模擬輸入模式(ADC用);0X3表示推挽輸出模式(做輸出口,50M速率);0X8表示上下拉輸入模式(做輸入口用);0XB表示復用輸出(使用IO口的第二功能,50M速率)。
給個實例,比如我們要設置PORTC的11 位為上拉輸入,12位為推挽輸出。代碼如下:
GPIOC->CRH&=0XFFF00FFF;//清掉這 2個位原來的設置,同時也不影響其他
位的設置
GPIOC->CRH|=0X0003800;//PC11輸入,PC12輸出
GPIOC->ODR=1<<11://PC11上拉