1 GPIO使用步骤
1.1. 使能GPIO对应的外设时钟
例如://使能GPIOA、GPIOB、GPIOC对应的外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC , ENABLE);
1.2. 声明一个GPIO_InitStructure结构体
GPIO_InitTypeDef GPIO_InitStructure;
1.3. 选择待设置的GPIO管脚
例如://选择待设置的GPIO第7、8、9管脚位 ,中间加“|”符号
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 |GPIO_Pin_8 | GPIO_Pin_9;
1.4. 设置选中GPIO管脚的速率
例如://设置选中GPIO管脚的速率为最高速率50MHz
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
1.5. 设置选中GPIO管脚的模式
例如://设置选中GPIO管脚的模式为开漏输出模式
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_Out_OD;//开漏输出模式
1.6. 根据GPIO_InitStructure中指定的参数初始化外设GPIOX
例如:
GPIO_Init(GPIOC,&GPIO_InitStructure);
1.7.其他应用
例: 将端口GPIOA的第10、15脚置1(高电平)
GPIO_SetBits(GPIOA,GPIO_Pin_10| GPIO_Pin_15);
例:将端口GPIOA的第10、15脚置0(低电平)
GPIO_ResetBits(GPIOA,GPIO_Pin_10| GPIO_Pin_15);
2. GPIO操作说明
2.1 库函数: 函数GPIO_DeInit
功能描述:将外设GPIOx寄存器重设为缺省值
例:
GPIO_DeInit(GPIOA);
2.2 函数GPIO_AFIODeInit
功能描述:将复用功能(重映射事件控制和EXTI设置)重设为缺省值
例:
GPIO_AFIODeInit();
2.3 函数GPIO_Init
功能描述:根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器
例:
GPIO_InitTypeDefGPIO_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);
2.3.1 GPIO_InitTypeDefstructure
GPIO_InitTypeDef定义于文件“stm32f10x_gpio.h”:
typedef struct {
u16GPIO_Pin;
GPIOSpeed_TypeDefGPIO_Speed;
GPIOMode_TypeDefGPIO_Mode;
}GPIO_InitTypeDef;
2.3.2 GPIO_Pin
该参数选择待设置的GPIO管脚,使用操作符“|”可以一次选中多个管脚。可以使用下表中的任意组合。
GPIO_Pin_None: 无管脚被选中
GPIO_Pin_x: 选中管脚x(0--15)
GPIO_Pin_All: 选中全部管脚
2.3.3 GPIO_Speed
用以设置选中管脚的速率。
GPIO_Speed_10MHz: 最高输出速率10MHz
GPIO_Speed_2MHz: 最高输出速率2MHz
GPIO_Speed_50MHz: 最高输出速率50MHz
2.3.4 GPIO_Mode
用以设置选中管脚的工作状态。
GPIO_Mode_AIN: 模拟输入
GPIO_Mode_IN_FLOATING: 浮空输入
GPIO_Mode_IPD: 下拉输入
GPIO_Mode_IPU: 上 拉输入
GPIO_Mode_Out_OD: 开漏输出
GPIO_Mode_Out_PP: 推挽输出
GPIO_Mode_AF_OD: 复用开漏输出
GPIO_Mode_AF_PP: 复用推挽输出
2.4 函数GPI
O_StructInit
功能描述:把GPIO_InitStruct中的每一个参数按缺省值填入 例:
GPIO_InitTypeDefGPIO_InitStructure;
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStruct:
GPIO_Pin:GPIO_Pin_All
GPIO_Speed:GPIO_Speed_2MHz
GPIO_Mode:GPIO_Mode_IN_FLOATING
2.5 函数GPIO_ReadInputDataBit
功能描述:读取指定端口管脚的输入
例:
u8ReadValue;
ReadValue= GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);
2.6 函数GPIO_ReadInputData
功能描述:读取指定的GPIO端口输入
例:
u16ReadValue;
ReadValue= GPIO_ReadInputData(GPIOC);
2.7 函数GPIO_ReadOutputDataBit
功能描述:读取指定端口管脚的输出
例:
u8ReadValue;
ReadValue= GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_7);
2.8 函数GPIO_ReadOutputData
功能描述:读取指定的GPIO端口输出
例:
u16ReadValue;
ReadValue= GPIO_ReadOutputData(GPIOC);
2.9 函数GPIO_SetBits
功能描述:置位指定的数据端口位
例: 将端口GPIOA的第10、15脚置1(高电平)
GPIO_SetBits(GPIOA,GPIO_Pin_10 | GPIO_Pin_15);
2.10 函数GPIO_ResetBits
功能描述:清除指定的数据端口位
例:将端口GPIOA的第10、15脚置0(低电平)
GPIO_ResetBits(GPIOA,GPIO_Pin_10 | GPIO_Pin_15);
2.11 函数GPIO_WriteBit
功能描述:设置或者清除指定的数据端口位
例:
GPIO_WriteBit(GPIOA,GPIO_Pin_15, Bit_SET);
2.12 函数GPIO_Write
功能描述:向指定GPIO数据端口写入数据
例:
GPIO_Write(GPIOA,0x1101);
2.13 函数GPIO_PinLockConfig
功能描述:锁定GPIO管脚设置寄存器
例:
GPIO_PinLockConfig(GPIOA,GPIO_Pin_0|GPIO_Pin_1);
2.14 函数GPIO_EventOutputConfig
功能描述:选择GPIO管脚用作事件输出 例:
GPIO_EventOutputConfig(GPIO_PortSourceGPIOE,GPIO_PinSource5);
GPIO_PortSource
GPIO_PortSource用以选择用作事件输出的GPIO端口。
2.15 函数GPIO_EventOutputCmd
功能描述:使能或者失能事件输出 例:
GPIO_EventOutputConfig(GPIO_PortSourceGPIOC,GPIO_PinSource6);
GPIO_EventOutputCmd(ENABLE);
2.16 函数GPIO_PinRemapConfig
功能描述:改变指定管脚的映射例:
GPIO_PinRemapConfig(GPIO_Remap_I2C1,ENABLE);
1
一.GPIO概述
共有8种模式
可以通过编程选择:
浮空输入
带上拉输入
带下拉输入
模拟输入
开漏输出——(此模式可实现hotpower说的真双向IO)
推挽输出
复用功能的推挽输出
复用功能的开漏输出