一、總述 1、STM32F10x共100個引腳,其中80個引腳為GPIO,分為5組,每組16個引腳,剩下的引腳為晶振輸入、電源輸入等。 2、每組GPIO由7個寄存器配置,分別是端口配置低寄存器(GPIOX_CRL)、端口配置高寄存器(GPIOX_CRH)、端口輸入數據寄存器、端口輸出數據寄存器、端口位清除寄存器、端口位設置/清除寄存器、端口鎖定配置寄存器。 二、GPIO的8種工作模式 1、上拉輸入(IPU):上拉就是輸入高電平,然后接一個上拉電阻(起保護作用)即表示該端口在默認情況下輸入為高電平。 2、下拉輸入(IPD):下拉指輸入接低電平,然后接一個下拉電阻,該端口在默認情況下輸入為低電平。3、浮空輸入(IN_FLOATING):浮空,顧名思義就是浮在空中,上面用繩子一拉就上去了,下面用繩子一拉就沉下去了。浮空輸入狀態下,IO的電平狀態是不確定的,完全由外部輸入決定,如果在該引腳懸空的情況下,讀取該端口的電平是不確定的。引腳電壓為不確定值,用于標準的通信協議如串口、I2C的接收端。 4、模擬輸入(AIN):不接上、下拉電阻,經由另一線路把電壓信號傳送到片上外設塊,所以使用 ADC外設的時候,必須設置為模擬輸入模式 5、推挽輸出(OUT_PP):推挽,就是有推有拉,任何時候IO口的電平都是確定的,不需要外接上拉或者下拉電阻。應用在輸出電平為0 和 3.3 伏的場合 6、開漏輸出(OUT_OD):開漏,就等于輸出口接了個NPN三極管,并且只接了E,B,而C極是開路的,你可以接一個電阻到3.3V,也可以接一個電阻到5V,這樣,在輸出1的時候,就可以是5V電壓,也可以是3.3V電壓了,但是不接電阻上拉的時候,這個輸出高就不能實現了。 7、復用推挽輸出(AF_PP):對于相應的復用模式,則是根據 GPIO 的復用功能來選擇的,如 GPIO的引腳用作串口的輸出,則使用復用推挽輸出模式。片內外設功能(I2C的SCL,SDA) 8、復用開漏輸出(AF_OD):如果用在 IC、SMBUS這些需要線與功能的復用場合,就使用復用開漏模式。片內外設功能(TX1,MOSI,MISO.SCK.SS) 三、STM32設置實例: 1、模擬I2C使用開漏輸出_OUT_OD,接上拉電阻,能夠正確輸出0和1;讀值時先GPIO_SetBits(GPIOB,GPIO_Pin_0);拉高,然后可以讀IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0); 2、如果是無上拉電阻,IO默認是高電平;需要讀取IO的值,可以使用帶上拉輸入_IPU和浮空輸入_IN_FLOATING和開漏輸出_OUT_OD; 四、通常有5種方式使用某個引腳功能,它們的配置方式如下: 1、作為普通GPIO輸入:根據需要配置該引腳為浮空輸入、帶弱上拉輸入或帶弱下拉輸入,同時不要使能該引腳對應的所有復用功能模塊。 2、作為普通GPIO輸出:根據需要配置該引腳為推挽輸出或開漏輸出,同時不要使能該引腳對應的所有復用功能模塊。 3、作為普通模擬輸入:配置該引腳為模擬輸入模式,同時不要使能該引腳對應的所有復用功能模塊。 4、作為內置外設的輸入:根據需要配置該引腳為浮空輸入、帶弱上拉輸入或帶弱下拉輸入,同時使能該引腳對應的某個復用功能模塊。
5、作為內置外設的輸出:根據需要配置該引腳為復用推挽輸出或復用開漏輸出,同時使能該引腳對應的所有復用功能模塊。
|