嵌入式開發中,GPIO(General-Purpose Input/Output)是最基礎也最常用的功能模塊之一。你可以把它想象成微控制器伸出來的無數根“手腳”:既可以用它輸出信號去點亮LED、驅動外設,也可以用它輸入信號來檢測按鍵、讀取傳感器狀態。
輸出模式-主動出擊
1)推挽輸出 (Push-Pull Output)
VDD(3.3V)│├───[PMOS]───┐│ ││ ├───● GPIO引腳│ │└───[NMOS]───┘│GND(0V)
工作原理:
- 輸出高電平(1):PMOS打開,NMOS關閉 → 引腳接電源VDD(3.3V)
- 輸出低電平(0):NMOS打開,PMOS關閉 → 引腳接地GND(0V)
使用場景:控制LED燈、數字信號輸出
2)開漏輸出 (Open-Drain Output)
VDD(內部無連接!)││X ← [PMOS被拆除]│└───[NMOS]───● GPIO引腳│GND
工作原理
- 輸出低電平:NMOS打開 → 接地
- 輸出高電平:NMOS關閉 → 懸空(高阻態)→ 必須外接上拉電阻到VDD才能輸出高電平
使用場景:I2C/SMBus 總線 (多設備共享線路)、驅動高壓設備 (外接上拉到 5V/12V)、多主機通信
輸入模式-豎起耳朵聽
1)浮空輸入 (Floating Input)
VDD││X ← 無內部上拉│
GPIO引腳 ┼───● 輸入檢測電路│X ← 無內部下拉│GND
- 引腳完全斷開內部電阻
- 電平狀態完全由外部電路決定
必須使用場景:ADC 模擬信號采樣
2)上拉/下拉輸入 (Pull-up/Pull-down Input)
上拉輸入結構:VDD││R(≈40kΩ)← 內部上拉電阻│
GPIO引腳 ┼───● 輸入檢測電路│X│GND
下拉輸入結構:VDD││X│
GPIO引腳 ┼───● 輸入檢測電路│R(≈40kΩ)← 內部下拉電阻│GND
工作原理:
- 上拉輸入:無外部信號時默認高電平(3.3V)
- 下拉輸入:無外部信號時默認低電平(0V)
按鍵檢測:按鍵接地型電路、按鍵接VCC型電路
注意
- 開漏輸出必須外接上拉電阻:阻值依總線速度和功耗選擇 (常用 4.7KΩ)
- 推挽輸出禁止并聯:會導致 VDD-GND 短路損壞MOS管
- 輸入電平容限:
- 5V容忍引腳:可承受 5V 輸入
- 非容忍引腳:輸入電壓 ≤ VDD+0.3V
- 模式切換:讀輸入前需切換為輸入模式(尤其輸出轉輸入時)
- 靜電防護:未使用引腳設為下拉/推挽輸出低電平