GPIO詳解:不僅僅是輸入輸出那么簡單

GPIO詳解:不僅僅是輸入輸出那么簡單

在這里插入圖片描述

“別小看一個小小的引腳,它可是 MCU 世界的社交之門。”


👋 先打個招呼:什么是 GPIO?

GPIO,全稱是 General Purpose Input/Output —— 通用輸入輸出口。

簡單說,它就像 MCU 身上的“手指”:

  • 輸入模式:它能感知外部世界(比如按鍵按下)
  • 輸出模式:它能控制外部設備(比如點亮LED)

別以為它只是通電/斷電!
GPIO 的“本領”比你想象的多很多!


🧠 GPIO 的核心概念梳理

概念通俗解釋
輸入模式“耳朵”——用來接收信號
輸出模式“手”——用來發出信號
上拉/下拉默認信號狀態,不懸空就靠它
推挽輸出能輸出高電平也能輸出低電平
開漏輸出只能拉低,靠外部上拉輸出高
復用功能“兼職”的引腳,比如串口、I2C、PWM等
中斷功能引腳也能“打斷”主程序,成為中斷源
速度設置并不是說跑步,而是電氣變化的快慢(驅動能力)

? 輸入模式:不是你以為的那么簡單

GPIO_MODE_INPUT

輸入模式一般配合 上拉下拉 使用:

場景原因
內部上拉防止引腳懸空漂移,默認為高電平
內部下拉保持引腳為低電平,適合低有效按鍵
無上拉下拉用外部電路控制,或用于模擬輸入

舉個例子:你用按鍵接 GND,那就要設置為“輸入 + 上拉”,按下時變低電平。


💡 輸出模式:推挽 vs 開漏

🚀 推挽輸出(GPIO_MODE_OUTPUT_PP)

在這里插入圖片描述

能把引腳拉高也能拉低,適合控制 LED、繼電器等。

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET); // 輸出高

🌪 開漏輸出(GPIO_MODE_OUTPUT_OD)

只能拉低,拉高需要靠外部上拉電阻。

適合做I2C總線、多個設備共用一根線的場景


🧬 復用模式:GPIO 的“分身術”

你定義的是 GPIO,其實它暗地里還兼職著:

  • USART_TX/RX(串口通信)
  • I2C_SCL/SDA(I2C 通信)
  • PWM 輸出
  • ADC 輸入
  • 外部中斷 EXTI

這就需要設置為 GPIO_MODE_AF_xx 模式(AF = Alternate Function)

👉 一個引腳,多種身份,選誰就看配置!


?? GPIO的輸出速度有啥用?

STM32等平臺經常讓你選:

  • GPIO_SPEED_FREQ_LOW
  • GPIO_SPEED_FREQ_MEDIUM
  • GPIO_SPEED_FREQ_HIGH

這并不是 MCU 執行速度,而是 引腳電氣輸出的上升/下降沿速度

  • 太快:可能引起信號串擾、干擾(尤其在長線上)
  • 太慢:可能帶不動外設,波形變形

推薦做法:

用途推薦速度
普通LEDLow
SPI/I2C/PWMMedium or High
驅動高速信號/屏幕High

🔧 中斷功能:GPIO也能做觸發器!

某些 GPIO 支持外部中斷,比如 STM32 的 EXTI(External Interrupt)。

配置為:

GPIO_MODE_IT_FALLING     // 下降沿觸發
GPIO_MODE_IT_RISING      // 上升沿觸發
GPIO_MODE_IT_RISING_FALLING // 雙邊觸發

然后寫 ISR(中斷服務函數)即可對按鈕、電平變化做出及時響應


📦 特殊功能小結(不同MCU略有不同)

特性說明
鎖定 GPIO防止誤改配置(STM32 有 GPIOx_LCKR)
上電默認態GPIO 默認可能是浮空,要謹慎使用
電流驅動能力有的 GPIO 可驅動幾十 mA,有的卻只能帶小負載
復用限制某些 GPIO 只能用于特定功能,不可亂配(查看芯片手冊)

🧪 實戰小練習建議

在這里插入圖片描述

練習項目技能點
點亮一個LED推挽輸出
按下按鈕點亮燈輸入 + 中斷
軟件控制蜂鳴器輸出控制、PWM復用
用一根線控制多個設備開漏輸出 + 上拉
軟件模擬串口開漏 + 中斷 + 復用

🧠 一句話總結

“GPIO,是MCU和世界溝通的最小單元,掌握它,你才能真正掌握嵌入式的‘肌肉’。”


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87639.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87639.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87639.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習5(深層神經網絡 + 參數和超參數)

深層神經網絡簡介 深層神經網絡是機器學習中一種重要的模型,它通過增加網絡的“深度”(即隱藏層的數量)來提升模型對復雜數據的表示和學習能力。同淺層類似,也分為三個部分: 輸入層:接收原始數據&#xff…

時間復雜度與空間復雜度分析

一、什么是復雜度? 1.1 為什么需要復雜度分析? 假設你寫了兩個程序來解決同一個問題,如何判斷哪個程序更好?我們不能只看運行時間,因為: 不同電腦性能不同同一電腦在不同時刻狀態也不同數據規模不同&#x…

上下文工程:從提示詞到自動化流程的AI應用新范式

上下文工程:從提示詞到自動化流程的 AI 應用新范式 一、背景與概述:從提示詞工程到上下文工程的演進 隨著大語言模型 (LLM) 技術的飛速發展,AI 應用開發正經歷從 “提示詞工程”(Prompt Engineering) 到 “上下文工程”(Context Engineerin…

HTML網頁應用打包Android App 完整實踐指南

技術準備與工具下載 必需工具清單 在開始之前,需要準備以下開發工具: Android Studio官網:https://developer.android.com/studio HBuilderX官網:https://www.dcloud.io/hbuilderx.html 離線SDK下載:https://nati…

簡單 Python 爬蟲程序設計

爬蟲是獲取網頁數據的常用工具,我們一起來設計一個基于 requests 和 BeautifulSoup 的簡單爬蟲,它可以獲取網頁內容并提取文本信息。 所需庫安裝 首先需要安裝兩個必要的庫: pip install requests beautifulsoup4 完整代碼 import reques…

AUTOSAR圖解==>AUTOSAR_AP_EXP_ARAComAPI

AUTOSAR ara::com API詳解 自適應平臺通信API技術詳解 目錄 1. 概述2. ara::com API架構 2.1 Proxy/Skeleton架構2.2 通信方式2.3 服務連接方式 3. 詳細API說明 3.1 Proxy類3.2 Skeleton類3.3 實例標識符3.4 通信組 4. ara::com API狀態管理 4.1 服務生命周期4.2 事件與方法狀…

Spring Boot + 本地部署大模型實現:優化與性能提升

在將大語言模型集成到 Spring Boot 應用中時,性能優化是一個關鍵環節。本地部署的大模型雖然提供了強大的功能,但也可能帶來一些性能挑戰,如響應時間較長、資源占用較高等問題。本文將介紹如何在 Spring Boot 應用中優化本地部署大模型的性能…

QML 鼠標只響應左鍵處理方法

【1】問題描述 默認情況下qml支持左鍵,如果需要支持右鍵,甚至是中鍵那需要設置 【2】設置方法 MouseArea{ id: mouse anchors.fill: parent property int cx: 0 pr…

北方算網亮相2025全球數字經濟大會|共繪數字友好城市建設

7月2日,以“建設數字友好城市”為主題的2025全球數字經濟大會隆重開幕,為構建技術與人、城市與生態和諧共進的全球數字經濟新生態提供交流合作平臺。自7月3日開始,北方算網將在大會集中亮相,先后在多個論壇中發表主題演講&#xf…

Android PNG/JPG圖ARGB_8888/RGB_565?解碼形成Bitmap在物理內存占用大小的簡單計算

Android PNG/JPG圖ARGB_8888/RGB_565?解碼形成Bitmap在物理內存占用大小的簡單計算 Android的Bitmap 是一個用于表示圖像數據的核心類,代表一張圖片在內存中的存儲,Bitmap存儲了圖像的像素信息數據。 Bitmap把圖像理解為像素點組成的二維矩陣&#xff…

力扣網編程55題:跳躍游戲之逆向思維

一. 簡介 前面一篇文章使用貪心算法解決 力扣網55題:跳躍游戲,文章如下: 力扣網編程55題:跳躍游戲之貪心算法-CSDN博客 二. 力扣網編程55題:跳躍游戲之逆向思維 給你一個非負整數數組 nums ,你最初位于數…

蒼穹外賣--day12數據統計-Excel報表

1.工作臺1.1實現思路工作臺是系統運營的數據看板,并提供快捷操作入口,可以有效提高商家的工作效率。工作臺展示的數據:①今日數據②訂單管理③菜品總覽④套餐總覽⑤訂單信息名詞解釋:①營業額:已經完成訂單的總金額②有…

鴻蒙應用開發:從網絡獲取數據

一、網絡狀態概述上述任一指標的變化均可視為網絡狀態的改變 二、獲取網絡信息 創建網絡對象 //創建網絡對象 //?表示可傳可不傳 connection.createNetConnection(netSpecifier?:NetSpecifier,timeout?:number):NetConnection;獲取默認激活網絡及其能力 //獲取默認激活網絡 …

探索開源虛擬 Excel 函數模塊:Python 中的 Excel 功能利器

在數據處理和分析的領域中,Excel 一直是一款備受青睞的工具,它提供了豐富多樣的函數,幫助用戶高效地完成各種數據操作。而現在,我(董翔)開發一個基于 Python 的虛擬 Excel 函數模塊,它將 Excel …

開源 vGPU 方案 HAMi: corememory 隔離測試

本文主要對開源的 vGPU 方案 HAMi 的 GPU Core&Memory 隔離功能進行測試。 省流: HAMi vGPU 方案提供的 Core&Memory 隔離基本符合預期: Core 隔離:Pod 能使用的算力會圍繞設定值波動,但是一段時間內平均下來和申請的 g…

openstack安裝并初始化

openstack安裝并初始化openStack 概述OpenStack 起源什么是Openstackopenstack優勢使用本地倉庫離線安裝系統基本環境設置為系統設置本地倉庫創建openstack-train的倉庫更新系統安裝部署工具一鍵安裝設置橋接網絡通過 Dashboard 體驗 OpenStack 功能創建云主機創建網絡(1)用adm…

解決 Cannot create Swift scratch context

場景復現 Xcode 控制臺輸出: Cannot create Swift scratch context (couldnt create a Clang Importer)Analysis 分析 發生了什么? 在調試 Swift 代碼或在 LLDB 里執行 po/expr 命令時,LLDB 需要為表達式臨時創建一份 “Swift scratch co…

機械時代的計算

1、機械計算起源 最近在想平衡三進制的除法,想看看那么大牛是怎么做的,資料很少,但還是有的,有但是看不懂,也不知靠不靠譜,后面跟著實踐了能行,下面就看看Balanced Ternary Arithmetic&#xff…

相機光學(四十八)——漸暈

1.什么是漸暈 漸暈,又稱“光衰減”,在光學和攝影中很常見,簡單來說就是與中心相比,圖像角落變暗。漸暈要么是由光學引起的,要么是在后期處理中故意添加的,目的是將觀看者的視線從角落的干擾物吸引到圖像的中…

LabVIEW多通道阻抗測試儀

LabVIEW集成 Keysight 數字萬用表與 NI 矩陣開關卡,構建多通道阻抗測試系統,實現設備連接電纜的多芯阻抗自動化測試,涵蓋數據采集、分析、記錄與顯示功能,適用于高精度阻抗檢測場景,展現LabVIEW在儀器控制與自動化測試…