STM32之GPIO輸出
在 STM32 的開發(fā)中,GPIO(通用輸入/輸出)是一種極其重要且常用的外設(shè)資源。無論是用于控制 LED、按鍵、電機驅(qū)動,還是與其他外設(shè)之間通信,GPIO 都是實現(xiàn)這些功能的核心接口。
一、示例代碼
這是一個在 STM32 HAL 庫中非常常見的初始化函數(shù),用于配置 GPIO 引腳為輸出模式,并設(shè)置相應的參數(shù)。
/**
* @brief 初始化GPIO引腳(用于LED控制)
* @param 無
* @retval 無
*/
void GPIO_Init(void)
{
/* 初始化GPIO結(jié)構(gòu)體,所有成員默認為0 */
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* 使能 GPIO 端口時鐘 */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOF_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
/* 設(shè)置GPIOC端口上LED1、LED2、LED3引腳初始狀態(tài)為高電平 */
HAL_GPIO_WritePin(GPIOC, LED1_Pin|LED2_Pin|LED3_Pin, GPIO_PIN_SET);
GPIO_InitStruct.Pin = LED1_Pin | LED2_Pin | LED3_Pin; /* 設(shè)置GPIO引腳屬性:選擇LED1、LED2、LED3引腳 */
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; /* 設(shè)置工作模式為推挽輸出 */
GPIO_InitStruct.Pull = GPIO_PULLUP; /* 設(shè)置內(nèi)部上拉電阻 */
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; /* 設(shè)置輸出速度為低速 */
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /* 初始化GPIO引腳,傳入端口地址和配置結(jié)構(gòu)體 */
}
二、GPIO_InitStruct參數(shù)配置
1、GPIO_InitStruct.Pin
選擇要配置的引腳
2、 GPIO_InitStruct.Mode
設(shè)置 GPIO 引腳的 工作模式。
推挽輸出(Output Push Pull)
- 輸入?yún)?shù):GPIO_MODE_OUTPUT_PP
- 描述:引腳輸出低或高電平,有驅(qū)動能力,適用于驅(qū)動負載
- 場景:LED、數(shù)碼管、外部電路驅(qū)動
開漏輸出(Output Open Drain)
- 輸入?yún)?shù):GPIO_MODE_OUTPUT_OD
- 描述:輸出高電平由外部上拉電阻決定,輸出低電平由內(nèi)部施放
- 場景:可能用于 I2C、邏輯總線
復用推挽輸出
- 輸入?yún)?shù):GPIO_MODE_OUTPUT_PP
- 描述:GPIO_MODE_OUTPUT_AF_PP
- 場景:SPI、I2C、UART 通信接口
復用開漏輸出
- 輸入?yún)?shù):GPIO_MODE_OUTPUT_AF_OD
- 描述:用于通信協(xié)議(如 SPI、UART、I2C)等,信號鏈路由外部上拉
- 場景:需要外部上拉的通信協(xié)議
3、GPIO_InitStruct.Pull
設(shè)置 GPIO 引腳的 上拉或下拉電阻。
啟用上拉電阻
- 輸入?yún)?shù):GPIO_PULLUP
- 描述:默認狀態(tài)為高電平,適用于按鈕、傳感器等
啟用下拉電阻
- 輸入?yún)?shù):GPIO_PULLUP
- 描述:默認狀態(tài)為低電平
無上下拉
- 輸入?yún)?shù):GPIO_NOPULL
- 描述:不自動上拉或下拉引腳
4、GPIO_InitStruct.Speed
設(shè)置 GPIO 引腳工作速度
低速
- 輸入?yún)?shù):GPIO_SPEED_FREQ_LOW
- 描述:最高5MHz
中速
- 輸入?yún)?shù):GPIO_SPEED_FREQ_MEDIUM
- 描述:5MHz ~ 25MHz
高速
- 輸入?yún)?shù):GPIO_SPEED_FREQ_HIGH
- 描述:25MHz ~ 50MHz
極高速
- 輸入?yún)?shù):GPIO_SPEED_FREQ_VERY_HIGH
- 描述:50MHz ~ 120MHz

浙公網(wǎng)安備 33010602011771號