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

在 STM32 中,所有的 GPIO 都挂载在 APB2 外设总线上,其外设名称按照 GPIOA、GPIOB、GPIOC 等命名,每个 GPIO 外设包含 16 个引脚,编号从 0 到 15。
寄存器是一段特殊的存储器内核,可通过 APB2 总线进行读写,以完成输出电平和读取电平的功能。寄存器的每一位对应一个引脚,输出寄存器写 1 对应引脚输出高电平,写 0 输出低电平;输入寄存器读取为 1 表示对应端口为高电平,读取为 0 表示低电平。由于 STM32 是 32 位单片机,内部寄存器为 32 位,但端口只有 16 位,因此寄存器只有低 16 位对应端口,高 16 位未使用。
驱动器用于提供足够的信号驱动能力,确保在执行操作(如点亮 LED)时信号能有效传输。
1.3 GPIO位结构

GPIO 的电路结构分为输入部分和输出部分。
输入部分
保护二极管:
- 连接两个保护二极管,用于对输入电压进行限幅。
- 当输入电压高于 3.3V 时,上方二极管导通,电流流入 VDD,避免过高电压伤害内部电路。
- 当输入电压低于 0V 时,下方二极管导通,电流从 VSS 流出。
上拉电阻和下拉电阻:
- 输入引脚连接一个上拉电阻和一个下拉电阻。
- 通过程序配置开关,可实现上拉输入、下拉输入或浮空输入。
- 上拉和下拉电阻为输入提供默认电平,避免引脚悬空导致输入数据不确定。
施密特触发器(肖特基触发器):
对输入电压进行整形,将输入电压与阈值比较。
大于阈值输出高电平,小于阈值输出低电平,有效避免因信号波动造成的输出抖动现象。
整形后的波形可写入输入数据寄存器,通过程序读取对应位数据,即可获取端口输入电平。

普通比较器和施密特触发器的区别
片上外设端口:
- 输入部分还连接片上外设端口,包括模拟输入(连接到 ADC)和复用功能输入(连接到其他需要读取端口的外设)。
输出部分
数字部分控制:
- 可由输出数据寄存器或片上外设控制,通过数据选择器连接到输出控制部分。
- 若选择输出数据寄存器控制,即为普通的 IO 口输出。
位设置清除寄存器:
可单独操作输出数据寄存器的某一位,而不影响其他位。
操作方式包括:
- 先读出寄存器,用按位与和按位或更改某一位后再写回。
- 直接通过位设置和位清除寄存器进行操作。
- 读写 STM32 中的位带区域来操作对应位。
注意
若仅使用库函数无法实现位带操作。
输出控制:
- 连接两个 MOS 管(P-MOS 和 N-MOS),可实现推挽输出、开漏输出和关闭三种输出方式。
- 推挽输出模式:
- P-MOS 和 N-MOS 均有效。
- 数据寄存器为 1 时上管导通、下管断开,输出高电平。
- 数据寄存器为 0 时上管断开、下管导通,输出低电平,高低电平均有较强驱动能力。
- 开漏输出模式:
- P-MOS 无效,只有 N-MOS 工作。
- 数据寄存器为 1 时下管断开,输出高阻态。
- 数据寄存器为 0 时下管导通,输出低电平,只有低电平有驱动能力,可用于通信协议驱动和输出 5V 电平信号。
- 关闭模式:
- 当引脚配置为输入模式时,两个 MOS 管均无效,输出关闭,端口电平由外部信号控制。
1.4 GPIO八种工作模式
通过配置GPIO的端口配置寄存器,端口可以配置成以下8种模式
| 模式名称 | 性质 | 特征 |
|---|---|---|
| 浮空输入 | 数字输入 | 可读取引脚电平,若引脚悬空,则电平不确定 |
| 上拉输入 | 数字输入 | 可读取引脚电平,内部连接上拉电阻,悬空时默认高电平 |
| 下拉输入 | 数字输入 | 可读取引脚电平,内部连接下拉电阻,悬空时默认低电平 |
| 模拟输入 | 模拟输入 | GPIO无效,引脚直接接入内部ADC |
| 开漏输出 | 数字输出 | 可输出引脚电平,高电平为高阻态,低电平接VSS |
| 推挽输出 | 数字输出 | 可输出引脚电平,高电平接VDD,低电平接VSS |
| 复用开漏输出 | 数字输出 | 由片上外设控制,高电平为高阻态,低电平接VSS |
| 复用推挽输出 | 数字输出 | 由片上外设控制,高电平接VDD,低电平接VSS |




二、STM32 外部设备和电路
2.1 LED和蜂鸣器介绍
LED(发光二极管):正向通电点亮,反向通电不亮。通过引脚长度判断正负极,长脚为正极,短脚为负极;也可通过 LED 内部结构判断正负极,较小的为正极,较大的为负极。
蜂鸣器:分为有源蜂鸣器和无源蜂鸣器。
- 内部自带振荡源,将正负极接上直流电压即可持续发声,频率固定。
- 内部不带振荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音。
2.2 LED和蜂鸣器驱动电路
相关信息
大多单片机或芯片遵循 高电平弱驱动,低电平强驱动 规则,以避免高低电平相互干扰。
LED 驱动电路:使用 GPIO 口驱动 LED 时,可以选择低电平或高电平驱动模式。在低电平驱动模式下,LED 正极接 3.3V,负极通过限流电阻接到 GPIO 引脚。当引脚输出低电平时,LED 点亮;当输出高电平时,LED 熄灭。限流电阻用于限制电流,以避免烧毁 LED。


蜂鸣器驱动电路:蜂鸣器通常使用三极管作为开关来驱动。若直接用 GPIO 口驱动可能负担过重,三极管可以有效地承担驱动任务。根据三极管的类型(PNP 或 NPN),驱动逻辑有所不同。
相关信息
三极管分为 PNP 和 NPN 两种类型,PNP 三极管的基极给 低电平 时导通,NPN 三极管的基极给 高电平 时导通。
由于三极管的通断需要在发射极和基极产生一定的开启电压,需注意 PNP 三极管发射极与 VSS,NPN 三极管发射极与 VDD 之间不要连接其他负载。


2.3 面包板介绍
面包板是一种常用的电子电路实验工具,其内部的金属爪可以实现元件引脚的电路连接。注意面包板的电源引脚(正负极)要正确连接,避免电路断电或短路。



