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)
同上