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-------------------------