GPIO口工作原理的超詳細解釋(附電路圖)
本文轉自:微信公眾號:電子工程專輯
STM32的GPIO介紹
STM32引腳說明
GPIO是通用輸入/輸出埠的簡稱,是STM32可控制的引腳。GPIO的引腳與外部硬體裝置連線,可實現與外部通訊、控制外部硬體或者採集外部硬體資料的功能。
STM32F103ZET6晶片為144腳晶片,包括7個通用目的的輸入/輸出口(GPIO)組,分別為GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF、GPIOG,同時每組GPIO口組有16個GPIO口。通常簡略稱為PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x為0-15。
STM32的大部分引腳除了當GPIO使用之外,還可以複用位外設功能引腳(比如串列埠),這部分在【STM32】STM32埠複用和重對映(AFIO輔助功能時鐘) 中有詳細的介紹。
GPIO基本結構
每個GPIO內部都有這樣的一個電路結構,這個結構在本文下面會具體介紹。
這邊的電路圖稍微提一下:
保護二極體:IO引腳上下兩邊兩個二極體用於防止引腳外部過高、過低的電壓輸入。當引腳電壓高於VDD時,上方的二極體導通;當引腳電壓低於VSS時,下方的二極體導通,防止不正常電壓引入晶片導致晶片燒燬。但是儘管如此,還是不能直接外接大功率器件,須加大功率及隔離電路驅動,防止燒壞晶片或者外接器件無法正常工作。
P-MOS管和N-MOS管:由P-MOS管和N-MOS管組成的單元電路使得GPIO具有“推輓輸出”和“開漏輸出”的模式。這裡的電路會在下面很詳細地分析到。
TTL肖特基觸發器:訊號經過觸發器後,模擬訊號轉化為0和1的數字訊號。但是,當GPIO引腳作為ADC採集電壓的輸入通道時,用其“模擬輸入”功能,此時訊號不再經過觸發器進行TTL電平轉換。ADC外設要採集到的原始的模擬訊號。
這裡需要注意的是,在檢視《STM32中文參考手冊V10》中的GPIO的表格時,會看到有“FT”一列,這代表著這個GPIO口時相容3.3V和5V的;如果沒有標註“FT”,就代表著不相容5V。
STM32的GPIO工作方式
GPIO支援4種輸入模式(浮空輸入、上拉輸入、下拉輸入、模擬輸入)和4種輸出模式(開漏輸出、開漏複用輸出、推輓輸出、推輓複用輸出)。同時,GPIO還支援三種最大翻轉速度(2MHz、10MHz、50MHz)。
每個I/O口可以自由程式設計,但I/O口暫存器必須按32位字被訪問。
GPIO_Mode_AIN 模擬輸入
GPIO_Mode_IN_FLOATING 浮空輸入
GPIO_Mode_IPD 下拉輸入
GPIO_Mode_IPU 上拉輸入
GPIO_Mode_Out_OD 開漏輸出
GPIO_Mode_Out_PP 推輓輸出
GPIO_Mode_AF_OD 複用開漏輸出
GPIO_Mode_AF_PP 複用推輓輸出
下面將具體介紹GPIO的這八種工作方式:
浮空輸入模式
浮空輸入模式下,I/O埠的電平訊號直接進入輸入資料暫存器。也就是說,I/O的電平狀態是不確定的,完全由外部輸入決定;如果在該引腳懸空(在無訊號輸入)的情況下,讀取該埠的電平是不確定的。
上拉輸入模式
上拉輸入模式下,I/O埠的電平訊號直接進入輸入資料暫存器。但是在I/O埠懸空(在無訊號輸入)的情況下,輸入端的電平可以保持在高電平;並且在I/O埠輸入為低電平的時候,輸入端的電平也還是低電平。
下拉輸入模式
下拉輸入模式下,I/O埠的電平訊號直接進入輸入資料暫存器。但是在I/O埠懸空(在無訊號輸入)的情況下,輸入端的電平可以保持在低電平;並且在I/O埠輸入為高電平的時候,輸入端的電平也還是高電平。
模擬輸入模式
模擬輸入模式下,I/O埠的模擬訊號(電壓訊號,而非電平訊號)直接模擬輸入到片上外設模組,比如ADC模組等等。
開漏輸出模式
開漏輸出模式下,通過設定位設定/清除暫存器或者輸出資料暫存器的值,途經N-MOS管,最終輸出到I/O埠。這裡要注意N-MOS管,當設定輸出的值為高電平的時候,N-MOS管處於關閉狀態,此時I/O埠的電平就不會由輸出的高低電平決定,而是由I/O埠外部的上拉或者下拉決定;當設定輸出的值為低電平的時候,N-MOS管處於開啟狀態,此時I/O埠的電平就是低電平。同時,I/O埠的電平也可以通過輸入電路進行讀取;注意,I/O埠的電平不一定是輸出的電平。
開漏複用輸出模式
開漏複用輸出模式,與開漏輸出模式很是類似。只是輸出的高低電平的來源,不是讓CPU直接寫輸出資料暫存器,取而代之利用片上外設模組的複用功能輸出來決定的。
總結與分析
1、什麼是推輓結構和推輓電路?
推輓結構一般是指兩個引數相同的三極體或MOS管分別受兩互補訊號的控制,總是在一個三極體或MOS管導通的時候另一個截止。高低電平由輸出電平決定。
推輓電路是兩個引數相同的三極體或MOSFET,以推輓方式存在於電路中,各負責正負半周的波形放大任務。電路工作時,兩隻對稱的功率開關管每次只有一個導通,所以導通損耗小、效率高。輸出既可以向負載灌電流,也可以從負載抽取電流。推拉式輸出級既提高電路的負載能力,又提高開關速度。
2、開漏輸出和推輓輸出的區別?
開漏輸出:只可以輸出強低電平,高電平得靠外部電阻拉高。輸出端相當於三極體的集電極。適合於做電流型的驅動,其吸收電流的能力相對強(一般20ma以內);
推輓輸出:可以輸出強高、低電平,連線數字器件。
關於推輓輸出和開漏輸出,最後用一幅最簡單的圖形來概括:
該圖中左邊的便是推輓輸出模式,其中比較器輸出高電平時下面的PNP三極體截止,而上面NPN三極體導通,輸出電平VS+;當比較器輸出低電平時則恰恰相反,PNP三極體導通,輸出和地相連,為低電平。右邊的則可以理解為開漏輸出形式,需要接上拉。
3、在STM32中選用怎樣選擇I/O模式?
浮空輸入_IN_FLOATING ——浮空輸入,可以做KEY識別,RX1
帶上拉輸入_IPU——IO內部上拉電阻輸入
帶下拉輸入_IPD—— IO內部下拉電阻輸入
模擬輸入_AIN ——應用ADC模擬輸入,或者低功耗下省電
開漏輸出_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實現輸出高電平。當輸出為1時,IO口的狀態由上拉電阻拉高電平,但由於是開漏輸出模式,這樣IO口也就可以由外部電路改變為低電平或不變。可以讀IO輸入電平變化,實現C51的IO雙向功能
推輓輸出_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的
複用功能的推輓輸出_AF_PP ——片內外設功能(I2C的SCL、SDA)
複用功能的開漏輸出_AF_OD——片內外設功能(TX1、MOSI、MISO.SCK.SS)
相關文章
- 【超詳細】解釋BigDecimal精度的坑Decimal
- 現代瀏覽器內部工作原理(附詳細流程圖)瀏覽器流程圖
- 請詳細描述AJAX的工作原理
- svn分支協同開發流程(內附超詳細流程圖和解釋)流程圖
- 圖文詳解 HDFS 的工作機制及其原理
- 全網最詳細的負載均衡原理圖解負載圖解
- SRAM電路工作原理
- SpringMVC工作原理詳解SpringMVC
- Java 動態代理原理圖解 (附:2種實現方式詳細對比)Java圖解
- Java註解最全詳解(超級詳細)Java
- Servlet、HTTP詳細解釋!ServletHTTP
- JPS 命令詳細解釋
- 超詳細的 Bert 文字分類原始碼解讀 | 附原始碼文字分類原始碼
- Spring AOP全面詳解(超級詳細)Spring
- Go Struct超詳細講解GoStruct
- 原生js實現圖片瀑布流佈局,註釋超詳細JS
- SpringBoot註解最全詳解(整合超詳細版本)Spring Boot
- 代理伺服器的工作原理詳解伺服器
- Application.Caller詳細解釋APP
- RabbitMQ原理和架構圖解(附6大工作模式)MQ架構圖解模式
- 詳細剖析分散式微服務架構下網路通訊的底層實現原理(圖解)分散式微服務架構圖解
- 「轉」Laravel 依賴注入原理(詳細註釋)Laravel依賴注入
- 鍵盤各個鍵的功能圖解 電腦鍵盤全圖詳細圖解
- mysql 索引的原理(超細)MySql索引
- 超詳細圖文介紹,華為桌面雲解決方案
- Elasticsearch BM25相關度演算法超詳細解釋Elasticsearch演算法
- 堆排序的Python實現(附詳細過程圖和講解)排序Python
- 矩陣分解--超詳細解讀矩陣
- 詳細講解函式呼叫原理函式
- Struts2工作原理(圖解)圖解
- 微服務 Zipkin 鏈路追蹤原理(圖文詳解)微服務
- vue的事件冒泡 最詳細解釋版本Vue事件
- mysql 5.7配置項最詳細的解釋MySql
- expdp/impdp 詳細引數解釋
- shell程式設計-sed命令詳解(超詳細)程式設計
- STM32 GPIO詳細篇(基於HAL庫)
- 《Kafka實戰》之生產者API使用(引數解釋超詳細)KafkaAPI
- WordPress網站訪問慢解決方案(超詳細圖文教程)網站