STM32 GPIO

STM32标准库学习笔记-STM32 GPIO

GPIO概述

  • GPIO(General Purpose Input Output)通用输入输出口
  • 可配置为8种输入输出模式
  • 引脚电平:0V~3.3V,部分引脚可容忍5V
  • 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
  • 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

GPIO详细介绍

GPIO基本结构

所有GPIO都处于APB2总线上,因此使用GPIO时务必开启APB2总线的时钟。

IO口结构

图中错误: 图中TTL肖特基触发器应为TTL施密特触发器

GPIO的不同模式

模式名称 性质 特征
浮空输入 数字输入 可读取引脚电平,若引脚悬空,则电平不确定
上拉输入 数字输入 可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
下拉输入 数字输入 可读取引脚电平,内部连接下拉电阻,悬空时默认低电平
模拟输入 模拟输入 GPIO无效,引脚直接接入内部ADC
开漏输出 数字输出 可输出引脚电平,高电平为高阻态,低电平接VSS
推挽输出 数字输出 可输出引脚电平,高电平接VDD,低电平接VSS
复用开漏输出 数字输出 由片上外设控制,高电平为高阻态,低电平接VSS
复用推挽输出 数字输出 由片上外设控制,高电平接VDD,低电平接VSS

代码实现

结构体

1
2
3
4
5
6
7
8
//开启时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//配置GPIO
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitTypeDef为GPIO初始化结构体

  1. GPIO_Mode为GPIO口模式
  2. GPIO_Pin为GPIO引脚编号,和 GPIO_Init的第一个参数共同指定引脚
  3. GPIO_Speed为GPIO工作速度
模式 GPIO_Mode
模拟输入 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
速度 GPIO_Speed
10M GPIO_Speed_10MHz 1
2M GPIO_Speed_2MHz 2
50M GPIO_Speed_50MHz 3

GPIO输出

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
//方法1
GPIO_ResetBits(GPIOA, GPIO_Pin_0);
GPIO_SetBits(GPIOA, GPIO_Pin_0);

//方法2
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);

//方法3
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)0);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, (BitAction)1);

//方法4
uint16_t data = 0x00;
GPIO_Write(GPIOA, data);

GPIO输入

1
2
3
4
5
6
7
8
9
//方法1
uint8_t data = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);

//方法2
uint16_t data = GPIO_ReadInputData(GPIOA);

//读取输出寄存器
uint8_t data = GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_0);
uint16_t data = GPIO_ReadOutputData(GPIOA);
Licensed under CC BY-NC-SA 4.0
使用 Hugo 构建
主题 StackJimmy 设计