STM32 GPIO

1. GPIO端口

端口引脚范围说明
GPIOAPA0-PA15(部分复用)通用输入输出端口A
GPIOBPB0-PB15(部分复用)通用输入输出端口B
GPIOCPC13-PC15通用输入输出端口C
其余GPIOx未设置引脚其他端口未引出

注释

  • 注释1:对于F1系列,GPIOx全部挂载在APB2总线上
  • 注释2:I/O口中写有"FT"表示这个GPIO容忍5V电压

2. 输入模式

模式特点使用场景
上拉输入高电位输入,内置电阻,使得输入电位为3.3V按钮
下拉输入低电位输入,内置电阻,使得输入电位为0V低电位输入传感器
浮空输入自定义电位输入,外接电阻,需要多少电位自己算外部有自己搓的电路给它配置电阻
模拟输入ADC模拟转换,将模拟信号转换为电信号ADC

3. 输出模式

模式特点使用场景
推挽输出N-MOS/P-MOS管均可导通。N-MOS:输出1——输出高电平;P-MOS:输出0——输出低电平。该模式对高低电平都有驱动能力通用输出
开漏输出N-MOS可导通通信协议、外接电阻实现5V输出
复用推挽/开漏输出复用是映射时才用得上外设功能复用

4. GPIO读取

4.1 读取函数

函数功能
GPIO_ReadInputDataBit(GPIOx, GPIO_Pin_x)读取输入状态
GPIO_ReadOutputDataBit(GPIOx, GPIO_Pin_x)读取输出状态

5. GPIO配置步骤

5.1 使能GPIO时钟

c
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE);

5.2 配置GPIO参数

c
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_x;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_XXX;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOx, &GPIO_InitStructure);

5.3 读取GPIO状态

c
GPIO_ReadInputDataBit(GPIOx, GPIO_Pin_x);

5.4 设置GPIO输出状态

c
GPIO_SetBits(GPIOx, GPIO_Pin_x);    // 输出高电平
GPIO_ResetBits(GPIOx, GPIO_Pin_x);  // 输出低电平
GPIO_WriteBit(GPIOx, GPIO_Pin_x, BitAction);  // 写入指定状态