STM32——GPIO詳細(xì)配置
一、STM32中GPIO模式的選擇方法:
(1)浮空輸入_IN_FLOATING ——浮空輸入,可以做KEY識(shí)別,RX1
(2)帶上拉輸入_IPU——IO內(nèi)部上拉電阻輸入
(3)帶下拉輸入_IPD—— IO內(nèi)部下拉電阻輸入
(4)模擬輸入_AIN ——應(yīng)用ADC模擬輸入,或者低功耗下省電
(5)開(kāi)漏輸出_OUT_OD ——IO輸出0接GND,IO輸出1,懸空,需要外接上拉電阻,才能實(shí)現(xiàn)輸出高電平。當(dāng)輸出為1時(shí),IO口的狀態(tài)由上拉電阻拉高電平,但由于是開(kāi)漏輸出模式,這樣IO口也就可以由外部電路改變?yōu)榈碗娖交虿蛔?。可以讀IO輸入電平變化,實(shí)現(xiàn)C51的IO雙向功能
(6)推挽輸出_OUT_PP ——IO輸出0-接GND, IO輸出1 -接VCC,讀輸入值是未知的
(7)復(fù)用功能的推挽輸出_AF_PP ——片內(nèi)外設(shè)功能(I2C的SCL,SDA)
(8)復(fù)用功能的開(kāi)漏輸出_AF_OD——片內(nèi)外設(shè)功能(TX1,MOSI,MISO.SCK.SS)
STM32設(shè)置實(shí)例:
(1)模擬I2C使用開(kāi)漏輸出_OUT_OD,接上拉電阻,能夠正確輸出0和1;讀值時(shí)先GPIO_SetBits(GPIOB, GPIO_Pin_0);拉高,然后可以讀IO的值;使用GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0);
(2)如果是無(wú)上拉電阻,IO默認(rèn)是高電平;需要讀取IO的值,可以使用帶上拉輸入_IPU和浮空輸入_IN_FLOATING和開(kāi)漏輸出_OUT_OD;
二、在STM32中如何配置片內(nèi)外設(shè)使用的IO端口
首先
①配置輸入的時(shí)鐘和初始化后即被激活(開(kāi)啟);
②如果使用該外設(shè)的輸入輸出管腳,則需要配置相應(yīng)的GPIO端口(否則該外設(shè)對(duì)應(yīng)的輸入輸出管腳可以做普通GPIO管腳使用);
③再對(duì)外設(shè)進(jìn)行詳細(xì)配置。
對(duì)應(yīng)到外設(shè)的輸入輸出功能有下述三種情況:
①外設(shè)對(duì)應(yīng)的管腳為輸出:需要根據(jù)外圍電路的配置選擇對(duì)應(yīng)的管腳為復(fù)用功能的推挽輸出或復(fù)用功能的開(kāi)漏輸出。
②外設(shè)對(duì)應(yīng)的管腳為輸入:則根據(jù)外圍電路的配置可以選擇浮空輸入、帶上拉輸入或帶下拉輸入。
③ADC對(duì)應(yīng)的管腳:配置管腳為模擬輸入。
如果把端口配置成復(fù)用輸出功能,則引腳和輸出寄存器斷開(kāi),并和片上外設(shè)的輸出信號(hào)連接。將管腳配置成復(fù)用輸出功能后,如果外設(shè)沒(méi)有被激活,那么它的輸出將不確定。
三、GPIO庫(kù)函數(shù)
首先,先介紹一下STM32固件庫(kù)函數(shù)的命名規(guī)則:
在函數(shù)名中,只允許存在一個(gè)下劃線(xiàn),用以分隔外設(shè)縮寫(xiě)和函數(shù)名的其它部分。
名為xx_Init的函數(shù),其功能是根據(jù)xx_InitTypeDef中指定的參數(shù),初始化外設(shè)xx。
名為xx_DeInit的函數(shù),其功能為復(fù)位外設(shè)xx的所有寄存器至缺省值。
名為xx_StructInit的函數(shù),其功能為通過(guò)設(shè)置xx_InitTypeDef 結(jié)構(gòu)中的各種參數(shù)來(lái)定義外設(shè)的功能。
名為xx_Cmd的函數(shù),其功能為使能或者失能外設(shè)xx。
名為xx_ITConfig的函數(shù),其功能為使能或者失能來(lái)自外設(shè)xx某中斷源。
名為xx_DMAConfig的函數(shù),其功能為使能或者失能外設(shè)xx的DMA接口。
名為xx_GetFlagStatus的函數(shù),其功能為檢查外設(shè)xx某標(biāo)志位被設(shè)置與否。
名為xx_ClearFlag的函數(shù),其功能為清除外設(shè)xx標(biāo)志位。
名為xx_GetITStatus的函數(shù),其功能為判斷來(lái)自外設(shè)xx的中斷發(fā)生與否。
名為xx_ClearITPendingBit的函數(shù),其功能為清除外設(shè)xx中斷待處理標(biāo)志位。
typedef signed long s32;
Type0def signed short s16;
typedef signed char s8;
typedef signed long const sc32;
typedef signed short const sc16;
typedef signed char const sc8;
typedef volatile signed long vs32;
typedef volatile signed short vs16;
typedef volatile signed char vs8;
typedef volatile signed long const vsc32;
typedef volatile signed short const vsc16;
typedef volatile signed char const vsc8;
typedef unsigned long u32;
typedef unsigned short u16;
typedef unsigned char u8;
typedef unsigned long const uc32;
typedef unsigned short const uc16;
typedef unsigned char const uc8;
typedef volatile unsigned long vu32;
typedef volatile unsigned short vu16;
typedef volatile unsigned char vu8;
typedef volatile unsigned long const vuc32;
typedef volatile unsigned short const vuc16;
typedef volatile unsigned char const vuc8;
GPIO寄存器結(jié)構(gòu)
GPIO_TypeDef和AFIO_TypeDef,在文件“stm32f10x_map.h”中定義:
typedef struct
{
vu32 CRL;
vu32 CRH;
vu32 IDR;
vu32 ODR;
vu32 BSRR;
vu32 BRR;
vu32 LCKR;
}
GPIO_TypeDef;
typedef struct
{
vu32 EVCR;
vu32 MAPR;
vu32 EXTICR[4];
}
AFIO_TypeDef;
四、庫(kù)函數(shù)
函數(shù)GPIO_DeInit
功能描述:將外設(shè)GPIOx寄存器重設(shè)為缺省值
例:
GPIO_DeInit(GPIOA);
函數(shù)GPIO_AFIODeInit
功能描述:將復(fù)用功能(重映射事件控制和EXTI設(shè)置)重設(shè)為缺省值
例:
GPIO_AFIODeInit();
函數(shù)GPIO_Init
功能描述:根據(jù)GPIO_InitStruct中指定的參數(shù)初始化外設(shè)GPIOx寄存器
例:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitTypeDef structure
GPIO_InitTypeDef定義于文件“stm32f10x_gpio.h”:
typedef struct
{
u16 GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}
GPIO_InitTypeDef;
GPIO_Pin
該參數(shù)選擇待設(shè)置的GPIO管腳,使用操作符“|”可以一次選中多個(gè)管腳??梢允褂孟卤碇械娜我饨M合。
GPIO_Pin_None:無(wú)管腳被選中
GPIO_Pin_x:選中管腳x(0--15)
GPIO_Pin_All:選中全部管腳
GPIO_Speed
GPIO_Speed:用以設(shè)置選中管腳的速率。
GPIO_Speed_10MHz:最高輸出速率10MHz
GPIO_Speed_2MHz:最高輸出速率2MHz
GPIO_Speed_50MHz:最高輸出速率50MHz
GPIO_Mode
GPIO_Mode:用以設(shè)置選中管腳的工作狀態(tài)。
GPIO_Mode_AIN:模擬輸入
GPIO_Mode_IN_FLOATING:浮空輸入
GPIO_Mode_IPD:下拉輸入
GPIO_Mode_IPU:上拉輸入
GPIO_Mode_Out_OD:開(kāi)漏輸出
GPIO_Mode_Out_PP:推挽輸出
GPIO_Mode_AF_OD:復(fù)用開(kāi)漏輸出
GPIO_Mode_AF_PP:復(fù)用推挽輸出
函數(shù)GPIO_StructInit
功能描述:把GPIO_InitStruct中的每一個(gè)參數(shù)按缺省值填入
例:
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStruct:
GPIO_Pin:GPIO_Pin_All
GPIO_Speed:GPIO_Speed_2MHz
GPIO_Mode:GPIO_Mode_IN_FLOATING
函數(shù)GPIO_ReadInputDataBit
功能描述:讀取指定端口管腳的輸入
例:
u8 ReadValue;
ReadValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7);
函數(shù)GPIO_ReadInputData
功能描述:讀取指定的GPIO端口輸入
例:
u16 ReadValue;
ReadValue = GPIO_ReadInputData(GPIOC);
函數(shù)GPIO_ReadOutputDataBit
功能描述:讀取指定端口管腳的輸出
例:
u8 ReadValue;
ReadValue = GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_7);
函數(shù)GPIO_ReadOutputData
功能描述:讀取指定的GPIO端口輸出
例:
u16 ReadValue;
ReadValue = GPIO_ReadOutputData(GPIOC);
函數(shù)GPIO_SetBits
功能描述:置位指定的數(shù)據(jù)端口位
例:
GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);
函數(shù)GPIO_ResetBits
功能描述:清除指定的數(shù)據(jù)端口位
例:
GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);
函數(shù)GPIO_WriteBit
功能描述:設(shè)置或者清除指定的數(shù)據(jù)端口位
例:
GPIO_WriteBit(GPIOA, GPIO_Pin_15, Bit_SET);
函數(shù)GPIO_Write
功能描述:向指定GPIO數(shù)據(jù)端口寫(xiě)入數(shù)據(jù)
例:
GPIO_Write(GPIOA, 0x1101);
函數(shù)GPIO_PinLockConfig
功能描述:鎖定GPIO管腳設(shè)置寄存器
例:
GPIO_PinLockConfig(GPIOA, GPIO_Pin_0 | GPIO_Pin_1);
函數(shù)GPIO_EventOutputConfig
功能描述:選擇GPIO管腳用作事件輸出
例:
GPIO_EventOutputConfig(GPIO_PortSourceGPIOE, GPIO_PinSource5);
GPIO_PortSource
GPIO_PortSource用以選擇用作事件輸出的GPIO端口。
GPIO_PinSource
GPIO_PinSource用以選擇用作事件輸出的GPIO管腳。
函數(shù)GPIO_EventOutputCmd
功能描述:使能或者失能事件輸出
例:
GPIO_EventOutputConfig(GPIO_PortSourceGPIOC, GPIO_PinSource6);
GPIO_EventOutputCmd(ENABLE);
函數(shù)GPIO_PinRemapConfig
功能描述:改變指定管腳的映射
例:
GPIO_PinRemapConfig(GPIO_Remap_I2C1, ENABLE);
GPIO_Remap
GPIO_Remap用以選擇用作事件輸出的GPIO端口。
GPIO_Remap_SPI1:SPI1復(fù)用功能映射
GPIO_Remap_I2C1:I2C1復(fù)用功能映射
GPIO_Remap_USART1:USART1復(fù)用功能映射
GPIO_PartialRemap_USART3:USART2復(fù)用功能映射
GPIO_FullRemap_USART3:USART3復(fù)用功能完全映射
GPIO_PartialRemap_TIM1:USART3復(fù)用功能部分映射
GPIO_FullRemap_TIM1:TIM1復(fù)用功能完全映射
GPIO_PartialRemap1_TIM2:TIM2復(fù)用功能部分映射1
GPIO_PartialRemap2_TIM2:TIM2復(fù)用功能部分映射2
GPIO_FullRemap_TIM2:TIM2復(fù)用功能完全映射
GPIO_PartialRemap_TIM3:TIM3復(fù)用功能部分映射
GPIO_FullRemap_TIM3:TIM3復(fù)用功能完全映射
GPIO_Remap_TIM4:TIM4復(fù)用功能映射
GPIO_Remap1_CAN:CAN復(fù)用功能映射1
GPIO_Remap2_CAN:CAN復(fù)用功能映射2
GPIO_Remap_PD01:PD01復(fù)用功能映射
GPIO_Remap_SWJ_NoJTRST:除JTRST外SWJ完全使能(JTAG SW-DP)
GPIO_Remap_SWJ_JTAGDisable:JTAG-DP失能 SW-DP使能
GPIO_Remap_SWJ_Disable:SWJ完全失能(JTAG SW-DP)
函數(shù)GPIO_EXTILineConfig
功能描述:選擇GPIO管腳用作外部中斷線(xiàn)路
例:
GPIO_EXTILineConfig(GPIO_PortSource_GPIOB, GPIO_PinSource8);