1. GPIO 的5個(gè)配置??
GPIO,即通用I/O(輸入/輸出)端口,是STM32可控制的引腳。STM32芯片的GPIO引腳與外部設(shè)備連接起來,可實(shí)現(xiàn)與外部通訊、控制外部硬件或者采集外部硬件數(shù)據(jù)的功能。
STM32F407有7組IO。分別為GPIOA~GPIOG,每組IO有16個(gè)IO口,共有112個(gè)IO口 ?通常稱為 PAx、PBx、PCx、PDx、PEx、PFx、PGx,其中x為0-15。 ?并且F4系列是基于Cortex-M4內(nèi)核?
GPIO的復(fù)用:
STM32F4 有很多的內(nèi)置外設(shè),這些外設(shè)的外部引腳都是與 GPIO 共用的。也就是說,一個(gè)引腳可以有很多作用,但是默認(rèn)為IO口,如果想使用一個(gè) GPIO內(nèi)置外設(shè)的功能引腳,就需要GPIO的復(fù)用,那么當(dāng)這個(gè) GPIO 作為內(nèi)置外設(shè)使用的時(shí)候,就叫做復(fù)用。 ? ?比如說串口 ?就是GPIO復(fù)用為串口.
?配置:?
1.引腳號(hào):? ? ? ? ? ? ? ? GPIO_Pin
2. 工作模式:? ? ? ? ? ?GPIO_Mode
3. 配置速度:? ? ? ? ? ? GPIO_Speed
4.輸出/輸入的方式:? GPIO_OType
5.有無上拉電阻 :? ? ? ?GPIO_PuPd??
分析每個(gè)配置的參數(shù):
?
1. 引腳號(hào)? ?參數(shù) (17 個(gè))
?GPIO_Pin_x (0--15)
2. 工作模式? ? (4個(gè)參數(shù))
typedef enum
{
GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */
GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */
GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */
GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */
}GPIOMode_TypeDef;
????????GPIO_Mode_IN? ? ?端口為輸入模式
????????GPIO_Mode_OUT? ? 端口為輸出模式
? ? ? ? ?GPIO_Mode_AF? ? ? 端口為 復(fù)用模式?
????????GPIO_Mode_AN? ? ? 端口 為? GPIO模擬模式
解釋:
復(fù)用模式:?STM32有很多內(nèi)置外設(shè),這些外設(shè)的外部引腳都是與GPIO復(fù)用的。一個(gè)GPIO如果可以復(fù)用為內(nèi)置外設(shè)的功能引腳,那么當(dāng)這個(gè)GPIO作為內(nèi)置外設(shè)使用的時(shí)候,就叫做復(fù)用。(簡單來說 ,這個(gè)口子,我同時(shí)需要做 輸出和輸入, 這就是復(fù)用?)
GPIO模擬模式:引腳信號(hào)直接連接模擬輸入,實(shí)現(xiàn)對(duì)外部信號(hào)的采集,可以收集?0~Vss?的電壓 值。 (簡單點(diǎn), ADC? ?DAC? ?數(shù)模轉(zhuǎn)換,模數(shù)轉(zhuǎn)換的 專用模式????????)
?3.速度 參數(shù)?
typedef enum
{
GPIO_Low_Speed = 0x00, /*!< Low speed */
GPIO_Medium_Speed = 0x01, /*!< Medium speed */
GPIO_Fast_Speed = 0x02, /*!< Fast speed */
GPIO_High_Speed = 0x03 /*!< High speed */
}GPIOSpeed_TypeDef;
/* Add legacy definition */
#define GPIO_Speed_2MHz GPIO_Low_Speed
#define GPIO_Speed_25MHz GPIO_Medium_Speed
#define GPIO_Speed_50MHz GPIO_Fast_Speed
#define GPIO_Speed_100MHz GPIO_High_Speed
GPIO_Low_Speed? ? ? ? ? ? ?速度為? ?2MHZ
GPIO_Medium_Speed? ? ??速度為? ?25MHZ
GPIO_Fast_Speed? ? ? ? ? ??速度為? ?50MHZ
GPIQ_High_Speed? ? ? ? ? ??速度為? ?100MHZ
4.輸出/輸入的方式:? 2個(gè)參數(shù)
typedef enum
{
GPIO_OType_PP = 0x00,
GPIO_OType_OD = 0x01
}GPIOOType_TypeDef;
GPIO_OType_PP? ? ? ?推挽輸出? (推挽輸出既可以輸出高電平也可以輸出低電平。)
GPIO_OType_OD? ? ? ? 開漏輸出? ?(只能輸出低電平,要想輸出高電平必須要接上拉電阻)
5.有無上拉電阻 :? ? ? ? (3個(gè)參數(shù))
typedef enum
{?
? GPIO_PuPd_NOPULL = 0x00,
? GPIO_PuPd_UP ? ? = 0x01,
? GPIO_PuPd_DOWN ? = 0x02
}GPIOPuPd_TypeDef;
GPIO_PuPd_NOPULL? ? ?( 浮空)
GPIO_PuPd_UP? ? ? ? ? (上拉電阻)? ?(開始的時(shí)候這個(gè) 端口的 電平是高電平)
GPIO_PuPd_DOWN? ? ? (下拉電阻)? (開始的時(shí)候這個(gè)端口的 電平是低電平)
6.配置輸入輸出模式有下面幾點(diǎn)值得注意:
作為普通GPIO輸入:根據(jù)需要配置該引腳為浮空輸入、帶弱上拉輸入或帶弱下拉輸入,同時(shí)不要使能該引腳對(duì)應(yīng)的所有復(fù)用功能模塊。
作為普通GPIO輸出:根據(jù)需要配置該引腳為推挽輸出或開漏輸出,同時(shí)不要使能該引腳對(duì)應(yīng)的所有復(fù)用功能模塊。
作為普通模擬輸入:配置該引腳為模擬輸入模式,同時(shí)不要使能該引腳對(duì)應(yīng)的所有復(fù)用功能模塊。
作為內(nèi)置外設(shè)的輸入:根據(jù)需要配置該引腳為浮空輸入、帶弱上拉輸入或帶弱下拉輸入,同時(shí)使能該引腳對(duì)應(yīng)的某個(gè)復(fù)用功能模塊。
7.配置為 八種工作模式
4種輸入模式
(1)GPIO_Mode_IN_FLOATING 浮空輸入
(2)GPIO_Mode_IPU 上拉輸入
(3)GPIO_Mode_IPD 下拉輸入
(4)GPIO_Mode_AIN 模擬輸入
4種輸出模式?
(5)GPIO_Mode_Out_OD 開漏輸出(帶上拉或者下拉)
(6)GPIO_Mode_AF_OD 復(fù)用開漏輸出(帶上拉或者下拉)
(7)GPIO_Mode_Out_PP 推挽輸出(帶上拉或者下拉)
(8)GPIO_Mode_AF_PP 復(fù)用推挽輸出(帶上拉或者下拉)
8. 開始配置 8種模式
1.?GPIO_Mode_IN_FLOATING 浮空輸入
//1.配置時(shí)鐘: 給個(gè)心跳。 選擇需要的時(shí)鐘頻率
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_InitTypeDef GIOSTRUCT;
//2.配置功能: 功能太多。 選擇GPIO功能;
GIOSTRUCT.GPIO_Mode=GPIO_Mode_IN ; // 輸入模式
GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引腳
GIOSTRUCT.GPIO_PuPd=GPIO_PuPd_NOPULL? ? ?; // 浮空電阻
GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
//外部無上拉電阻選擇推挽輸出, 外部有上拉電阻選擇開漏輸出
GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
GPIO_Init(GPIOE,&GIOSTRUCT);
?
2.GPIO_Mode_IPU 上拉輸入
//1.配置時(shí)鐘: 給個(gè)心跳。 選擇需要的時(shí)鐘頻率
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_InitTypeDef GIOSTRUCT;
//2.配置功能: 功能太多。 選擇GPIO功能;
GIOSTRUCT.GPIO_Mode=GPIO_Mode_IN ; // 輸入模式
GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引腳
GIOSTRUCT.GPIO_PuPd=GPIO_PuPd_UP ?; // 上拉電阻
GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
//外部無上拉電阻選擇推挽輸出, 外部有上拉電阻選擇開漏輸出
GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
GPIO_Init(GPIOE,&GIOSTRUCT);
3.GPIO_Mode_IPD 下拉輸入
//1.配置時(shí)鐘: 給個(gè)心跳。 選擇需要的時(shí)鐘頻率
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_InitTypeDef GIOSTRUCT;
//2.配置功能: 功能太多。 選擇GPIO功能;
GIOSTRUCT.GPIO_Mode=GPIO_Mode_IN ; // 輸入模式
GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引腳
GIOSTRUCT.GPIO_PuPd=GPIO_PuPd_DOWN ? ; // 下拉電阻
GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
//外部無上拉電阻選擇推挽輸出, 外部有上拉電阻選擇開漏輸出
GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
GPIO_Init(GPIOE,&GIOSTRUCT);
4.GPIO_Mode_AIN 模擬輸入
//1.配置時(shí)鐘: 給個(gè)心跳。 選擇需要的時(shí)鐘頻率
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_InitTypeDef GIOSTRUCT;
//2.配置功能: 功能太多。 選擇GPIO功能;
GIOSTRUCT.GPIO_Mode=GPIO_Mode_AN? ; // 輸入模式
GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引腳
GIOSTRUCT.GPIO_PuPd= 隨意? ; //
GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
//外部無上拉電阻選擇推挽輸出, 外部有上拉電阻選擇開漏輸出
GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
GPIO_Init(GPIOE,&GIOSTRUCT);
5.GPIO_Mode_Out_OD 開漏輸出(帶上拉或者下拉)
//1.配置時(shí)鐘: 給個(gè)心跳。 選擇需要的時(shí)鐘頻率
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_InitTypeDef GIOSTRUCT;
//2.配置功能: 功能太多。 選擇GPIO功能;
GIOSTRUCT.GPIO_Mode=GPIO_Mode_OUT ; // 輸出模式
GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引腳
GIOSTRUCT.GPIO_PuPd= 上拉/下拉? ; //
GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
//外部無上拉電阻選擇推挽輸出, 外部有上拉電阻選擇開漏輸出
GIOSTRUCT.GPIO_OType=GPIO_OType_OD;
GPIO_Init(GPIOE,&GIOSTRUCT);
//1.配置時(shí)鐘: 給個(gè)心跳。 選擇需要的時(shí)鐘頻率
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_InitTypeDef GIOSTRUCT;
//2.配置功能: 功能太多。 選擇GPIO功能;
GIOSTRUCT.GPIO_Mode=GPIO_Mode_AF ; // 輸出模式
GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引腳
GIOSTRUCT.GPIO_PuPd= 上拉/下拉? ; //
GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
//外部無上拉電阻選擇推挽輸出, 外部有上拉電阻選擇開漏輸出
GIOSTRUCT.GPIO_OType=GPIO_OType_OD;
GPIO_Init(GPIOE,&GIOSTRUCT);
6.GPIO_Mode_AF_OD 復(fù)用開漏輸出(帶上拉或者下拉)
//1.配置時(shí)鐘: 給個(gè)心跳。 選擇需要的時(shí)鐘頻率
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_InitTypeDef GIOSTRUCT;
//2.配置功能: 功能太多。 選擇GPIO功能;
GIOSTRUCT.GPIO_Mode=GPIO_Mode_AF ; // 輸出模式
GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引腳
GIOSTRUCT.GPIO_PuPd= 上拉/下拉? ; //
GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
//外部無上拉電阻選擇推挽輸出, 外部有上拉電阻選擇開漏輸出
GIOSTRUCT.GPIO_OType=GPIO_OType_OD;
GPIO_Init(GPIOE,&GIOSTRUCT);
7.GPIO_Mode_Out_PP 推挽輸出(帶上拉或者下拉)文章來源:http://www.zghlxwxcb.cn/news/detail-407238.html
//1.配置時(shí)鐘: 給個(gè)心跳。 選擇需要的時(shí)鐘頻率
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_InitTypeDef GIOSTRUCT;
//2.配置功能: 功能太多。 選擇GPIO功能;
GIOSTRUCT.GPIO_Mode=GPIO_Mode_OUT ; // 輸出模式
GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引腳
GIOSTRUCT.GPIO_PuPd= 上拉/下拉? ; //
GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
//外部無上拉電阻選擇推挽輸出, 外部有上拉電阻選擇開漏輸出
GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
GPIO_Init(GPIOE,&GIOSTRUCT);
8.GPIO_Mode_AF_PP 復(fù)用推挽輸出(帶上拉或者下拉)文章來源地址http://www.zghlxwxcb.cn/news/detail-407238.html
//1.配置時(shí)鐘: 給個(gè)心跳。 選擇需要的時(shí)鐘頻率
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
GPIO_InitTypeDef GIOSTRUCT;
//2.配置功能: 功能太多。 選擇GPIO功能;
GIOSTRUCT.GPIO_Mode=GPIO_Mode_AF ; // 復(fù)用模式
GIOSTRUCT.GPIO_Pin=GPIO_Pin_8 |GPIO_Pin_9 ;//引腳
GIOSTRUCT.GPIO_PuPd= 上拉/下拉? ; //
GIOSTRUCT.GPIO_Speed=GPIO_Low_Speed;//配置速度
//外部無上拉電阻選擇推挽輸出, 外部有上拉電阻選擇開漏輸出
GIOSTRUCT.GPIO_OType=GPIO_OType_PP;
GPIO_Init(GPIOE,&GIOSTRUCT);
到了這里,關(guān)于stm32f407VET6 系統(tǒng)學(xué)習(xí) day01 GPIO 配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!