[STM32 GPIO配置]
- GPIO初始化結(jié)構(gòu)體:
//定義結(jié)構(gòu)體
GPIO_InitTypeDef GPIO_InitStructure;
//配置GPIO_Mode
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
//GPIO_Pin選擇
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
//GPIO_Speed設(shè)置
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- 關(guān)于
GPIO_Mode
:
在程序函數(shù)里是這么寫的:
/**
* @brief Configuration Mode enumeration
*/
typedef enum
{ GPIO_Mode_AIN = 0x0,
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
GPIO_Mode_Out_OD = 0x14,
GPIO_Mode_Out_PP = 0x10,
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;
? 其中,具體的模式及使用說明如下:
?
GPIO_Mode_AIN
為模擬輸入模式(Analog Input Mode)。? 在該模式下,GPIO引腳被配置為模擬信號輸入。ADC模塊可以將引腳讀取到的模擬信號轉(zhuǎn)換成數(shù)字信號進(jìn)行處理。這種模式適用于需要精確模擬量信號輸入的場合,如溫度傳感器、光傳感器等。
?
GPIO_Mode_IN_FLOATING
為浮空輸入模式(Floating Input Mode)。? 在該模式下,GPIO引腳處于高阻態(tài)且未選通上拉或下拉電阻。這種模式適用于數(shù)字輸入信號不需要精度要求的場合,例如控制系統(tǒng)中一些狀態(tài)量檢測、接近傳感器等的信號輸入。但是,在使用輸入浮空模式時,需要注意防止靜電干擾和誤操作。
?
GPIO_Mode_IPD
為下拉輸入模式(Input with Pull-up Mode)。? 在該模式下,GPIO引腳通過一個上拉電阻與VDD相連。當(dāng)外部電路未連接時,引腳被拉向高電平。這種模式適用于需要穩(wěn)定輸入信號的場合,如按鍵開關(guān)、震動傳感器等的信號輸入。此模式適用于數(shù)字輸入信號需要精度要求的場合。
?
GPIO_Mode_IPU
為上拉輸入模式(Input with Pull-down Mode)。? 在該模式下,GPIO引腳通過一個下拉電阻與GND相連。當(dāng)外部電路未連接時,引腳被拉向低電平。這種模式同樣適用于需要穩(wěn)定輸入信號的場合,如按鍵開關(guān)、震動傳感器等的信號輸入。此模式同樣適用于數(shù)字輸入信號需要精度要求的場合。
?
GPIO_Mode_Out_OD
為開漏輸出模式(Open-drain Output Mode)。? 在該模式下,GPIO引腳可以輸出低電平信號,但輸出高電平信號時變?yōu)楦咦钁B(tài)。需搭配一個外部上拉電阻使引腳運作正確。開漏輸出模式適用于驅(qū)動外部設(shè)備,如LED燈、數(shù)碼管等。此模式適用于外部設(shè)備控制信號輸出的場合。
?
GPIO_Mode_Out_PP
為推挽輸出模式(Push-pull Output Mode)。? 在該模式下,GPIO引腳可以輸出高、低電平信號。推挽輸出模式適用于直接驅(qū)動負(fù)載場合,如電機(jī)、繼電器等的輸出驅(qū)動。此模式適用于直接驅(qū)動負(fù)載的控制信號輸出的場合。
?
GPIO_Mode_AF_OD
為開漏式復(fù)用功能模式(Open-drain Alternate Function Mode)? 在該模式下,GPIO引腳可以被配置為一些標(biāo)準(zhǔn)的或自定義的功能,例如I2C總線通訊的SCL時鐘線。這種模式下,GPIO引腳被配置為開漏輸出模式,適用于驅(qū)動外部設(shè)備或總線通訊。
?
GPIO_Mode_AF_PP
推挽式復(fù)用功能模式(Push-pull Alternate Function Mode)? 在該模式下,GPIO引腳可以被配置為一些標(biāo)準(zhǔn)的或自定義的功能,例如USART通信的TX、RX數(shù)據(jù)線。這種模式下,GPIO引腳被配置為推挽輸出模式,適用于直接驅(qū)動負(fù)載或者數(shù)據(jù)通訊。
- 關(guān)于
GPIO_Speed
:
在程序函數(shù)里是這么寫的:
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
說實話,我也不太清楚Speed具體有什么用,站內(nèi)查了一下資料,是這么說的:
? GPIO 引腳速度,又稱輸出驅(qū)動電路的響應(yīng)速度:(芯片內(nèi)部在I/O口的輸出部分安排了多個響應(yīng)速度不同的輸出驅(qū)動電路,用戶可以根據(jù)自己的需要選擇合適的驅(qū)動電路,通過選擇速度來選擇不同的輸出驅(qū)動模塊,達(dá)到最佳的噪聲控制和降低功耗的目的。)
可理解為: 輸出驅(qū)動電路的帶寬:即一個驅(qū)動電路可以不失真地通過信號的最大頻率。
? 這里給出鏈接stm32引腳速度GPIO_Speed的區(qū)別
這樣一來,GPIO的基本參數(shù)就了解完成了,下面給出完整的配置函數(shù):
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
? 這里將GPIOA的Pin_1引腳配置為了上拉輸入。因為是從按鍵函數(shù)里拽過來的
給出GPIO的使用函數(shù)文章來源:http://www.zghlxwxcb.cn/news/detail-826902.html
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//設(shè)置為高電平
- GPIOx:要操作的GPIO端口,可以是GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF或GPIOG。
- GPIO_Pin:要設(shè)置為高電平的引腳編號,取值范圍為0-15。
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//設(shè)置為低電平
- GPIOx:要操作的GPIO端口,可以是GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF或GPIOG。
- GPIO_Pin:要設(shè)置為高電平的引腳編號,取值范圍為0-15。
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);//寫電平
- GPIOx:要操作的GPIO端口,可以是GPIOA、GPIOB、GPIOC、GPIOD、GPIOE、GPIOF或GPIOG。
- PortVal:要輸出的值,取值范圍為0到FFFF(16位)。
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//讀取指定GPIO端口和引腳號對應(yīng)的輸入狀態(tài)
- GPIOx:GPIO端口號(例如GPIOA、GPIOB等)。
- GPIO_Pin:引腳號(例如GPIO_Pin_0、GPIO_Pin_1等)。
- 函數(shù)返回值為uint8_t類型。
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);//讀取指定GPIO端口的輸入數(shù)據(jù)
- GPIOx:可以是A、B、C、D、E、F或G端口之一。
- 返回值是一個16位的無符號整數(shù),表示指定GPIO端口上各個引腳的電平狀態(tài)(1為高電平,0為低電平)。
END文章來源地址http://www.zghlxwxcb.cn/news/detail-826902.html
到了這里,關(guān)于[STM32 GPIO配置]的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!