1. 什么是GPIO(IO口)?
-
GPIO(General Purpose Input/Output)即通用输入输出引脚,是芯片与外部设备交互的接口。
-
输入模式:用于读取外部信号(如按键状态、传感器数据)。
-
输出模式:用于控制外部设备(如点亮LED、驱动继电器)。
GPIO的工作模式(CubeMX配置选项)
模式类型 | 功能描述 |
---|---|
输入模式 | |
- 浮空输入 | 引脚电平完全由外部电路决定,无内部上拉或下拉(易受干扰)。 |
- 上拉输入 | 内部上拉电阻将引脚默认拉至高电平(3.3V)。 |
- 下拉输入 | 内部下拉电阻将引脚默认拉至低电平(0V)。 |
输出模式 | |
- 推挽输出 | 可输出高/低电平,驱动能力强(常用驱动LED)。 |
- 开漏输出 | 可输出高/低电平,输出高电平时需外接上拉电阻,适合电平转换或总线通信(如I2C)。 |
复用功能 | GPIO用作其他外设接口(如USART、SPI),需在CubeMX中配置复用功能模式。 |
2. GPIO的高低电平详解
-
高电平:我们经常配置GPIO口为SET(1),即通常为将IO口置电压为
3.3V
(取决于芯片供电电压VDD),最低有效电压(VIH)约为2.0V
。 -
低电平:我们配置GPIO口为RESET(0),通常将IO口置电压为
0V
,最高有效电压(VIL)约为1.0V
。
3. GPIO寄存器操作与位运算
关键寄存器
寄存器名称 | 功能描述 |
---|---|
GPIOx_ODR | 输出数据寄存器,直接控制引脚输出电平(1=高,0=低)。 |
GPIOx_IDR | 输入数据寄存器,读取引脚当前电平状态。 |
GPIOx_BSRR | 位设置/清除寄存器,可原子操作(如PA0置高:BSRR = 0x00000001 )。 |
位操作示例
-
GPIOA的PA0~PA15对应寄存器位0~15(二进制从右到左):
-
PA0:
0b0000 0000 0000 0001
(十六进制0x0001
) -
PA1:
0b0000 0000 0000 0010
(十六进制0x0002
) -
依此类推,PA15为
0x8000
。
-
一般GPIO口都是0x0001代表GPIOx_PIN_0,0x8000代表GPIOx_PIN_15,
我们就可以将GPIOx_PIN_y表示成1<<y(<<是左移)。
4. 上下拉电阻的作用与配置
-
上拉电阻:默认将引脚拉至高电平,避免悬空时的随机干扰(如按键接地时配置上拉)。
-
下拉电阻:默认将引脚拉至低电平,避免悬空时的误触发(如按键接电源时配置下拉)。
类型 | 作用 | 典型连接方式 | 示例场景 |
---|---|---|---|
上拉电阻 | 确保默认高电平 | 信号线 → 电阻 → 电源 | 按键、开漏输出 |
下拉电阻 | 确保默认低电平 | 信号线 → 电阻 → GND | 传感器输入、复位电路 |
限流电阻 | 限制电流,保护元件 | 电源 → 电阻 → LED → GND | LED驱动、电机控制 |
如图PA15是上拉电阻,PA12是下拉电阻。