GPIO的8種工作模式


1、浮空輸入GPIO_IN_FLOATING ——浮空輸入,可以做KEY識別,RX1

   eg,

#define GPIO_MODE_INPUT 0x00000000U / *!<輸入浮動模式* /

當GPIO采用浮空輸入模式時,STM32的引腳狀態是不確定的,此時STM32得到的電平狀態完全取決於GPIO外部的電平狀態,所以說在GPIO外部的引腳懸空時,讀取該端口的電平狀態是個不確定的值。
————————————————
版權聲明:本文為CSDN博主「施俊年」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lvshitianxia/article/details/80969739

 

2、帶上拉輸入GPIO_IPU——IO內部上拉電阻輸入

     eg,

#define GPIO_MODE_IT_RISING 0x10110000U / *!<具有上升沿觸發檢測的外部中斷模式* /

#define GPIO_MODE_IT_FALLING 0x10210000U / *!<具有下降沿觸發檢測的外部中斷模式* /

#define GPIO_MODE_IT_RISING_FALLING 0x10310000U / *!<具有上升沿/下降沿觸發檢測的外部中斷模式* /

我查到STM32的數據手冊中關於上下拉的電阻的介紹是電阻阻值都在30-50K之間。

為什么要用帶上拉或者下拉輸入的模式呢?因為浮空模式時,在GPIO外部連接的電路未工作時,STM32讀取的GPIO狀態是不確定的,所以可以采用帶上拉或者下拉輸入的模式先給MCU一個確定的狀態,當外部電路電平狀態發生變化時,易於MCU的判斷。這樣可以增強MCU的抗干擾能力
————————————————
版權聲明:本文為CSDN博主「施俊年」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lvshitianxia/article/details/80969739

3、帶下拉輸入GPIO_IPD——IO內部下拉電阻輸入

        同上

4、模擬輸入GPIO_AIN ——應用ADC模擬輸入,或者低功耗下省電

       eg,

#define GPIO_MODE_ANALOG 0x00000003U / *!<模擬模式* /

這個很好理解,最常用的場合是ADC模擬輸入,不像其他輸入模式只有0和1,模擬輸入模式可以讀取到很細微變化的值。

5、開漏輸出GPIO_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實現輸出高電平。當輸出為1時,IO口的狀態由上拉電阻拉高電平,但由於是開漏輸出模式,這樣IO口也就可以由外部電路改變為低電平或不變。可以讀IO輸入電平變化,實現C51的IO雙向功能

         eg,

#define GPIO_MODE_OUTPUT_OD 0x00000011U / *!<輸出開漏模式* /

我們重點講開漏輸出,一般開漏輸出模式時,如果外部不接上拉電阻時,只能輸出低電平,所以要想輸出高電平必須要外接上拉電阻。這樣做的有一個好處,可以用來匹配不同的電平信號,也就是用於不同電壓的系統之間的通信;另外,因為要輸出高電平需要有外部的上拉電阻,所以在進行通信時,通信的速度也受到上拉電阻阻值的影響,阻值小時,通信速度可以很快,阻值大時,通信速度變慢,但也不能為了通信速度把上拉電阻用的很小,也要注意在電阻很小時,功耗會變大,所以要平衡好這個度。
————————————————
版權聲明:本文為CSDN博主「施俊年」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lvshitianxia/article/details/80969739

6、推挽輸出GPIO_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的

      eg,

#define GPIO_MODE_OUTPUT_PP 0x00000001U / *!<輸出推拉模式* /

推挽結構一般是指兩個三極管分別受兩個互補信號的控制,總是在一個三極管導通的時候另一個截止。這種結構既可以輸出高電平,,也可以輸出低電平,可以用於連接數字器件。

推挽電路是兩個參數相同的三極管或MOSFET,以推挽方式存在於電路中,各負責正負半周的波形放大任務,電路工作時,兩只對稱的功率開關管每次只有一個導通,所以導通損耗小,效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。推拉式輸出級既提高電路的負載能力,又提高開關速度。
————————————————
版權聲明:本文為CSDN博主「施俊年」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lvshitianxia/article/details/80969739

7、復用功能的推挽輸出GPIO_AF_PP ——片內外設功能(I2C的SCL,SDA)

      eg,

#define GPIO_MODE_AF_PP 0x00000002U / *!<備用功能推拉模式* /

#define GPIO_MODE_AF_OD 0x00000012U / *!<Alternate Function Open Drain Mode * /

這兩種模式,可以理解為把GPIO配置為第二功能使用的時候的配置,並非單純的用作IO輸入或輸出。

比如使用外設IIC時,我們需要把GPIO配置為復用推挽輸出,用於數據通信功能。

再比如串口通信的TX,以及SPI外設的GPIO使用就要把引腳設置為復用開漏輸出
————————————————
版權聲明:本文為CSDN博主「施俊年」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/lvshitianxia/article/details/80969739

8、復用功能的開漏輸出GPIO_AF_OD——片內外設功能(TX1,MOSI,MISO.SCK.SS)

         同上


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM