GPIO1:GPIO簡(jiǎn)介

GPIO

1.GPIO簡(jiǎn)介(General Purpose IO Ports)

通用輸入輸出端口,可通過(guò)他們輸出高/低點(diǎn)平或 通過(guò)它們讀入引腳的狀態(tài),是高電平還是低點(diǎn)平。
用戶(hù)可以通過(guò)GPIO口 與硬件舉行數(shù)據(jù)交互(UART),
或控制硬件工作(LED,蜂鳴器等),讀取硬件的工作狀態(tài)信號(hào)(如中斷信號(hào))等。
提供輸入輸出信號(hào),傳輸存儲(chǔ),控制信息的。

GPIO工作模式。

通過(guò)配置GPIO的端口寄存器,端口可以配置成8種模式。

模式名稱(chēng) 性質(zhì) 特征 典型應(yīng)用場(chǎng)景
浮空輸入GPIO_MODE_INPUT 數(shù)字輸入 可讀取引腳電平,若引腳懸空,則電平不穩(wěn)定 外部已提供確定電平的信號(hào)
上拉輸入GPIO_MODE_INPUT GPIO_PULLUP 數(shù)字輸入 可讀取引腳電平,內(nèi)部連接上拉電阻,懸空時(shí)默認(rèn)高電平 按鍵檢測(cè)(按鍵接地)
下拉輸入GPIO_MODE_INPUT GPIO_PULLDOWN 數(shù)字輸入 可讀取引腳電平,內(nèi)部連接下拉電阻,懸空時(shí)默認(rèn)低電平 按鍵,高電平觸發(fā)的傳感器信號(hào)
模擬輸入GPIO_MODE_ANALOG 模擬輸入 GPIO無(wú)效,引腳直接接入內(nèi)部ADC,比如電壓采集 ADC輸入、DAC輸出
開(kāi)漏輸出GPIO_MODE_OUTPUT_OD 數(shù)字輸出 可輸出引腳電平,高電平為高阻態(tài),低電平接VSS 通訊I2C、單總線(xiàn)
推挽輸出(常用)GPIO_MODE_OUTPUT_PP 數(shù)字輸出 可輸出引腳電平,高電平接VDD,低電平接VSS LED、PWM、SPI
復(fù)用開(kāi)漏輸出GPIO_MODE_AF_OD 數(shù)字輸出 由片上外設(shè)控制,高電平為高阻態(tài),低電平接VSS I2C_SDA、I2C_SCL,片內(nèi)外設(shè)功能TX1,MOSI,MISO,SCK,SS
復(fù)用推挽輸出GPIO_MODE_AF_PP 數(shù)字輸出 由片上外設(shè)控制,高電平接VDD,低電平接VSS USART_TX、SPI_MOSI,片內(nèi)外設(shè)功能SCL/SDL

中斷:
GPIO_MODE_IT_RASING 外部中斷,上升沿觸發(fā)檢測(cè)
GPIO_MODE_IT_FALLING 外部中斷,下降沿觸發(fā)檢測(cè)
GPIO_MODE_IT_RASING_FAILLING 外部中斷,上升和下降雙沿觸發(fā)檢測(cè)
GPIO_MODE_IT_EVT_RASING 外部事件,上升沿
GPIO_MODE_IT_EVT_FALLING 外部中斷,下降沿觸發(fā)檢測(cè)
GPIO_MODE_IT_EVT_RASING_FALLING 外部中斷,上升和下降雙沿觸發(fā)檢測(cè)

GPIO的初始化。

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; //設(shè)置所選管腳的速度
GPIO_NOPULL; 設(shè)置管腳的上拉和下拉;
MX_GPIO_Init(); 初始化所設(shè)置的引腳。

常用模式詳解

0. 推挽輸出

推挽輸出(Push-Pull Output) 是 GPIO 最常用的輸出模式之一,適用于需要強(qiáng)驅(qū)動(dòng)能力和明確高低電平的場(chǎng)景。
結(jié)構(gòu):
推挽輸出由兩個(gè)MOS管(PMOS 和 NMOS)組成:
PMOS(上管):負(fù)責(zé)拉高電平(VDD)。
NMOS(下管):負(fù)責(zé)拉低電平(GND)。
兩個(gè)MOS管不會(huì)同時(shí)導(dǎo)通,避免短路。
輸出方式:
輸出高電平(1):PMOS 導(dǎo)通,NMOS 關(guān)閉,引腳連接至 VDD(如 3.3V)。
輸出低電平(0):NMOS 導(dǎo)通,PMOS 關(guān)閉,引腳連接至 GND(0V)。

1. 開(kāi)漏輸出(Open-Drain Output)

特點(diǎn):輸出端只能拉低電平(接地)或高阻態(tài)(懸空),不能主動(dòng)輸出高電平。
需外接上拉電阻才能實(shí)現(xiàn)高電平輸出。

常見(jiàn)用途:
電平轉(zhuǎn)換(兼容不同電壓的設(shè)備)。
多設(shè)備共享總線(xiàn)(如I2C、單總線(xiàn)協(xié)議),避免沖突。
需要“線(xiàn)與”邏輯的場(chǎng)景(多個(gè)開(kāi)漏輸出連接時(shí),任一設(shè)備拉低即全局低電平)。

2.輸入模式(Input Mode)

浮空輸入(Floating Input):無(wú)內(nèi)部上拉/下拉電阻,引腳電平完全由外部電路決定。易受干擾,需外部確保穩(wěn)定電平。
上拉/下拉輸入(Pull-up/Pull-down Input):通過(guò)內(nèi)部電阻將引腳默認(rèn)電平拉高或拉低,避免懸空時(shí)的噪聲。

常見(jiàn)用途:
讀取按鍵、開(kāi)關(guān)狀態(tài)(通常配上拉或下拉)。
接收數(shù)字信號(hào)(如UART、GPIO中斷)。

3.復(fù)用功能模式(Alternate Function)

特點(diǎn):GPIO引腳被配置為外設(shè)專(zhuān)用功能(如SPI、UART、PWM等),由硬件自動(dòng)控制輸入/輸出。
常見(jiàn)用途:
通信接口(USART、I2C、SPI)。
定時(shí)器輸出(PWM、捕獲輸入)。

4.模擬模式(Analog Mode)

特點(diǎn):引腳直接連接至ADC(模數(shù)轉(zhuǎn)換器)或DAC(數(shù)模轉(zhuǎn)換器),禁用數(shù)字電路。
常見(jiàn)用途:
采集模擬信號(hào)(如傳感器數(shù)據(jù)、電池電壓)。
輸出模擬信號(hào)(通過(guò)DAC)。

5.最常用的模式排名

推挽輸出:驅(qū)動(dòng)能力強(qiáng),高低電平明確,用于控制LED、繼電器等。
開(kāi)漏輸出:用于總線(xiàn)協(xié)議(I2C)或電平轉(zhuǎn)換。
上拉/下拉輸入:讀取數(shù)字信號(hào)時(shí)防干擾。
復(fù)用功能:使用硬件外設(shè)時(shí)必選。

6.選擇依據(jù)

輸出需求:推挽(普通驅(qū)動(dòng))、開(kāi)漏(總線(xiàn)共享)。
輸入需求:上拉/下拉(穩(wěn)定信號(hào))、浮空(外部已處理)。
特殊功能:復(fù)用或模擬模式。
例如,I2C總線(xiàn)必須使用開(kāi)漏輸出,而按鍵檢測(cè)常用上拉輸入。

2.GPIO初始化結(jié)構(gòu)體定義。

GPIO_InitTypeDef GPIO_InitStructure;
Pin: 指定配置的GPIO管腳
Mode:指定所選管腳的操作模式
Pull:指定所選管腳的操作
Speed: 指定選定管腳的速度
Alernate:要連接到所選引腳的外設(shè)。

__HAL_RCC_GPIOC_CLK_ENABLE();//開(kāi)啟AHB1時(shí)鐘
可用GPIO引腳26個(gè)。
PA組:PA0~PA15
PB組:PB0~PB7
PC組:PC13~PC15.

3. 常用函數(shù)。

3.1 void HAL_GPIO_WritePin 設(shè)置GPIO電平狀態(tài)。

用于設(shè)置引腳輸出高/低電平,通過(guò)BDRR寄存器付匯或置位操作。
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
參數(shù)1:端口號(hào),可選范圍:GPIOA 到 GPIOG。
參數(shù)2:引腳號(hào),可選范圍:GPIO_PIN_0 到 GPIO_PIN_15
參數(shù)3:設(shè)置輸出狀態(tài),2個(gè)枚舉值可選擇。
GPIO_PIN_SET 表示高電平
GPIO_PIN_RESET 表示低電平

3.2 HAL_GPIO_ReadPin() 讀取GPIO電平狀態(tài)。

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
讀取指定GPIO端口和 引腳號(hào)的電平狀態(tài)。
參數(shù)1:端口號(hào),可選范圍:GPIOA 到 GPIOG。
參數(shù)2:引腳號(hào),可選范圍:GPIO_PIN_0 到 GPIO_PIN_15
返回值:
GPIO_PIN_SET 高電平1
GPIO_PIN_RESET 低電平0

-------------------End-------------------------

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 簡(jiǎn)介 A:創(chuàng)業(yè)新人 B:創(chuàng)業(yè)導(dǎo)師 正文 A:我最近感覺(jué)自己的創(chuàng)業(yè)之路非常困難。 B:你遇到什么困難了? A:我感覺(jué)...
    iGuo閱讀 120評(píng)論 0 1
  • 防溺水·交通安全倡議書(shū) 全體師生及家長(zhǎng)朋友們: 溺水和交通是造成青少年意外死亡的第一殺手。青少年是祖國(guó)的未來(lái)、...
  • 緩解眼部疲勞的方法: 1.眼部運(yùn)動(dòng):可進(jìn)行眼球轉(zhuǎn)動(dòng)練習(xí),雙眼向上、下、左、右四個(gè)方向轉(zhuǎn)動(dòng),再順時(shí)針和逆時(shí)針轉(zhuǎn)動(dòng)眼球...
    十二5257閱讀 41評(píng)論 0 0
  • 再敬馬拉松精神 ---------記2025和縣半程馬拉松賽 今日帶兒子參加了和縣半程馬拉松,我早早的就報(bào)了名,賽...
    律海浮沉閱讀 61評(píng)論 0 0
  • 《向著你心中的目標(biāo)邁進(jìn)》 在人生路上我如同在黑暗中摸索的行者,心中懷揣著那一抹希望的光亮——目標(biāo)。它宛如燈塔,照亮...
    珍妮317閱讀 103評(píng)論 0 3

友情鏈接更多精彩內(nèi)容