推挽輸出:
GPIO引腳線路經過兩個保護二極管后,向上流向“輸入模式”結構,向下流向“輸出模式”結構。先看輸出模式部分,線路經過一個由P-MOS和N-MOS管組成的單元電路。這個結構使GPIO具有了“推挽輸出”和“開漏輸出”兩種模式。
所謂的推挽輸出模式,是根據這兩個MOS管的工作方式來命名的。在該結構中輸入高電平時,經過反向后,上方的P-MOS導通,下方的N-MOS關閉,對外輸出高電平;而在該結構中輸入低電平時,經過反向后,N-MOS管導通,P-MOS關閉,對外輸出低電平。當引腳高低電平切換時,兩個管子輪流導通,P管負責灌電流,N管負責拉電流,使其負載能力和開關速度都比普通的方式有很大的提高。推挽輸出的低電平為0伏,高電平為3.3伏,具體參考圖 8‑2,它是推挽輸出模式時的等效電路。
開漏輸出
而在開漏輸出模式時,上方的P-MOS管完全不工作。如果我們控制輸出為0,低電平,則P-MOS管關閉,N-MOS管導通,使輸出接地,若控制輸出為1 (它無法直接輸出高電平)時,則P-MOS管和N-MOS管都關閉,所以引腳既不輸出高電平,也不輸出低電平,為高阻態。為正常使用時必須外部接上拉電阻,參考圖 8‑3中等效電路。它具有“線與”特性,也就是說,若有很多個開漏模式引腳連接到一起時,只有當所有引腳都輸出高阻態,才由上拉電阻提供高電平,此高電平的電壓為外部上拉電阻所接的電源的電壓。若其中一個引腳為低電平,那線路就相當於短路接地,使得整條線路都為低電平,0伏。
推挽輸出模式一般應用在輸出電平為0和3.3伏而且需要高速切換開關狀態的場合。在STM32的應用中,除了必須用開漏模式的場合,我們都習慣使用推挽輸出模式。
開漏輸出一般應用在I2C、SMBUS通訊等需要“線與”功能的總線電路中。除此之外,還用在電平不匹配的場合,如需要輸出5伏的高電平,就可以在外部接一個上拉電阻,上拉電源為5伏,並且把GPIO設置為開漏模式,當輸出高阻態時,由上拉電阻和電源向外輸出5伏的電平,具體見圖 8‑4。
STM32 IO 口 如何 與 5V 的傳感器連接