在上一篇博客中有說過GPIO的工作模式是需要自己根據項目硬件需求配置的,分別是4種輸出,4種輸入
這8種工作模式的定義都可以在庫裏面找到定義
四種輸入:
GPIO_Mode_IPU(上拉輸入)
GPIO_Mode_IPD(下拉輸入)
簡述原理:
經過上拉開關和下拉開關的連接,再經過觸發器轉化爲0,1的數字信號,存儲到數據寄存器中,然後我們就可以通過配置寄存器CRL,CRH控制這兩個開關。
簡述用法:
若GPIO引腳配置爲上拉輸入模式,在默認狀態下(GPIO引腳無輸入),取得的GPIO引腳數據爲1,既高電平.
而下拉輸入模式則是相反的,在默認狀態下其引腳數據爲0,低電平.
GPIO_Mode_IN_FLOATING(浮空輸入)
簡述原理:
不接上拉和下拉開關,直接經由觸發器輸入.
簡述用法:
若配置成這個模式可以用電錶測量其引腳電壓是1點幾伏(不確定的值).由於輸入阻抗較大,一般把這種模式用於標準的通訊協議例如:I2C,USART的接收端.
GPIO_Mode_AIN(模擬輸入) (其實這個比較好懂,就是要用到電壓採集的時候一般都是這個模式)
簡述原理:
直接關閉觸發器,不接上拉和下拉開關,由另一路開關傳至片上外設模塊.
簡述用法:
例如傳送至ADC模塊時,就由ADC採集電壓信號.(使用ADC外設的時候,必須是設置爲模擬輸入模式).
四種輸出:
GPIO_Mode_Out_PP(普通推輓輸出)
簡述原理:
經過一個由P_MOS和N_MOS管組成的單元電路.輸出高電平(3.3V)時,P_MOS導通,低電平(0V)時,N_MOS導通(兩個管子輪流導通,一個進電流,一個拉電流.這樣它的負載能力和開關速度都比普通方式有大的提高)
簡述用法:
一般都是應用在輸出電平爲0和3.3V的場合.
GPIO_Mode_Out_OD(普通開漏輸出)
簡述原理:
在輸出0時,既高電平,則N_MOS管導通,使輸出接地.在輸出1時,則不輸出高電平也不輸出低電平(無法輸出高電平,本身爲高阻態).所以在使用的時候,必須在外部接上一個上拉電阻並且開漏輸出模式具有”線與”的特性,既有很多開漏模式的引腳接到一起時,只有在所有引腳都處於高阻態的時候,纔會輸出高電平.(電壓是外部上拉電阻所接電源的電壓).只要其中一個引腳是低電平,那麼整個線路都等於短路接地(低電平),電壓是0V.(只要是開漏輸出模式,都必須接上拉電阻)
簡述用法:
一般應用在電平不匹配的場合,如需要輸出5V的高電平,就需要在外部接上一個上拉電阻,電源爲5V.這時在輸出高組態的時候,就會由上拉電阻和電源向外輸出5V.
GPIO_Mode_AF_PP(複用推輓輸出)
GPIO_Mode_AF_OD(複用開漏輸出)
簡述原理:
同上.
簡述用法:
對於複用模式,一般都是由GPIO的複用功能來選擇的(比如一個IO引腳可以做一般輸入輸出,同時還是串口輸出腳,這就是複用)
例如:GPIO的引腳用作串口的輸出,就可以使用複用推輓輸出模式了.如果是用在I2C,SMBUS這些需要線與功能的,就使用複用開漏輸出
PS:附上工作模式原理圖,想具體瞭解的朋友可以看着原理圖對照我上面所說的,一步步看,最右邊的爲IO引腳