純干貨!GPIO八大工作模式介紹
發(fā)布時間:2021-11-08 15:42:26
GPIO是通用輸入/輸出端口的簡稱,是STM32可控制的引腳。GPIO的引腳與外部硬件設備連接,可實現(xiàn)與外部通訊、控制外部硬件或者采集外部硬件數(shù)據(jù)的功能。由于STM32版本不同,因此引腳數(shù)量和功能也會不同,所以GPIO在進行設置時會有所差異。大部分STM32引腳除了作為簡單的GPIO使用外,還會被復用于其他功能,比如USART,這些在STM32手冊中會有詳細介紹,使用時需要根據(jù)不同的型號進行選擇。
每個GPIO內部都會有一個電路結構,下圖即為該結構,GPIO的大部分功能實現(xiàn)都與其相關。
以下是對電路圖中部分內容介紹:
(1)保護二極管:IO引腳上下兩邊兩個二極管用于防止引腳外部過高、過低的電壓輸入。當引腳電壓高于VDD時,上方的二極管導通;當引腳電壓低于VSS時,下方的二極管導通,防止不正常電壓引入芯片導致芯片燒毀。
但是盡管如此,還是不能直接外接大功率器件,須加大功率及隔離電路驅動,防止燒壞芯片或者外接器件無法正常工作。
(2) P-MOS管和N-MOS管:由P-MOS管和N-MOS管組成的單元電路使得GPIO具有“推挽輸出”和“開漏輸出”的模式。
(3)TTL肖特基觸發(fā)器:信號經過觸發(fā)器后,模擬信號轉化為0和1的數(shù)字信號。但是,當GPIO引腳作為ADC采集電壓的輸入通道時,用其“模擬輸入”功能,此時信號不再經過觸發(fā)器進行TTL電平轉換。ADC外設要采集到的原始的模擬信號。
GPIO的工作模式分為:浮空輸入、上拉輸入、下拉輸入、模擬輸入、開漏輸出、復用開漏輸出、推挽輸出、復用推挽輸出等八種工作模式,同時還會支持三種最大翻轉速度依次為:2MHz\10MHz\50MHz。
以下為STM32使用中工作模式的定義:
GPIO_Mode_IN_FLOATING 浮空輸入
GPIO_Mode_IPD 下拉輸入
GPIO_Mode_IPU 上拉輸入
GPIO_Mode_AIN 模擬輸入
GPIO_Mode_Out_OD 開漏輸出
GPIO_Mode_AF_OD 復用開漏輸出
GPIO_Mode_Out_PP 推挽輸出
GPIO_Mode_AF_PP 復用推挽輸出
(1) 浮空輸入模式
浮空輸入模式下,I/O端口的電平信號直接進入輸入數(shù)據(jù)寄存器。也就是說,I/O的電平狀態(tài)是不確定的,完全由外部輸入決定;如果在該引腳懸空(在無信號輸入)的情況下,讀取該端口的電平是不確定的。
(2) 上拉輸入模式
上拉輸入模式下,I/O端口的電平信號直接進入輸入數(shù)據(jù)寄存器。但是在I/O端口懸空(在無信號輸入)的情況下,輸入端的電平可以保持在高電平;并且在I/O端口輸入為低電平的時候,輸入端的電平也還是低電平。
(3) 下拉輸入模式
下拉輸入模式下,I/O端口的電平信號直接進入輸入數(shù)據(jù)寄存器。但是在I/O端口懸空(在無信號輸入)的情況下,輸入端的電平可以保持在低電平;并且在I/O端口輸入為高電平的時候,輸入端的電平也還是高電平。
(4) 模擬輸入模式
模擬輸入模式下,I/O端口的模擬信號(電壓信號,而非電平信號)直接模擬輸入到片上外設模塊,比如ADC模塊等等。
(5) 開漏輸出模式
開漏輸出模式下,通過設置位設置/清除寄存器或者輸出數(shù)據(jù)寄存器的值,途經N-MOS管,最終輸出到I/O端口。
這里要注意N-MOS管,當設置輸出的值為高電平的時候,N-MOS管處于關閉狀態(tài),此時I/O端口的電平就不會由輸出的高低電平決定,而是由I/O端口外部的上拉或者下拉決定;當設置輸出的值為低電平的時候,N-MOS管處于開啟狀態(tài),此時I/O端口的電平就是低電平。
同時,I/O端口的電平也可以通過輸入電路進行讀取;注意,I/O端口的電平不一定是輸出的電平。
(6) 復用開漏輸出模式
復用開漏輸出模式,與開漏輸出模式很是類似。只是輸出的高低電平的來源,不是讓CPU直接寫輸出數(shù)據(jù)寄存器,取而代之利用片上外設模塊的復用功能輸出來決定的。
(7) 推挽輸出模式
推挽輸出模式下,通過設置位設置/清除寄存器或者輸出數(shù)據(jù)寄存器的值,途經P-MOS管和N-MOS管,最終輸出到I/O端口。
這里要注意P-MOS管和N-MOS管,當設置輸出的值為高電平的時候,P-MOS管處于開啟狀態(tài),N-MOS管處于關閉狀態(tài),此時I/O端口的電平就由P-MOS管決定:高電平;當設置輸出的值為低電平的時候,P-MOS管處于關閉狀態(tài),N-MOS管處于開啟狀態(tài),此時I/O端口的電平就由N-MOS管決定:低電平。
同時,I/O端口的電平也可以通過輸入電路進行讀??;注意,此時I/O端口的電平一定是輸出的電平。
(8) 復用推挽輸出模式
推挽復用輸出模式,與推挽輸出模式很是類似。只是輸出的高低電平的來源,不是讓CPU直接寫輸出數(shù)據(jù)寄存器,取而代之利用片上外設模塊的復用功能輸出來決定的。
推挽結構一般是指兩個參數(shù)相同的三極管或MOS管分別受兩互補信號的控制,總是在一個三極管或MOS管導通的時候另一個截止。高低電平由輸出電平決定。
推挽電路是兩個參數(shù)相同的三極管或MOSFET,以推挽方式存在于電路中,各負責正負半周的波形放大任務。電路工作時,兩只對稱的功率開關管每次只有一個導通,所以導通損耗小、效率高。
輸出既可以向負載灌電流,也可以從負載抽取電流。推拉式輸出級既提高電路的負載能力,又提高開關速度。
開漏輸出:只可以輸出強低電平,高電平得靠外部電阻拉高。輸出端相當于三極管的集電極。適合于做電流型的驅動,其吸收電流的能力相對強(一般20ma以內);
推挽輸出:可以輸出強高、低電平,連接數(shù)字器件。
左圖為推挽輸出模式,右圖為開漏輸出模式
浮空輸入_IN_FLOATING——浮空輸入,可以做KEY識別,RX1
帶上拉輸入_IPU——IO內部上拉電阻輸入
帶下拉輸入_IPD——IO內部下拉電阻輸入
模擬輸入_AIN——應用ADC模擬輸入,或者低功耗下省電
開漏輸出_OUT_OD——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實現(xiàn)輸出高電平。
當輸出為1時,IO口的狀態(tài)由上拉電阻拉高電平,但由于是開漏輸出模式,這樣IO口也就可以由外部電路改變?yōu)榈碗娖交虿蛔?。可以讀IO輸入電平變化,實現(xiàn)C51的IO雙向功能
推挽輸出_OUT_PP——IO輸出0-接GND,IO輸出1-接VCC,讀輸入值是未知的
復用功能的推挽輸出_AF_PP——片內外設功能(I2C的SCL、SDA)
復用功能的開漏輸出_AF_OD——片內外設功能(TX1、MOSI、MISO.SCK.SS)
好了,以上就是GPIO中的八大工作模式介紹,希望能對大家的學習有所幫助!
- 上一篇:一篇文章帶你了解什么是Shell
- 下一篇:【技術論壇】I2C協(xié)議分析