小白stm32入门教程学习记录:3-1GPIO输出
GPIO简介
GPIO(General Purpose Input Output)通用输入输出口
可配置为8种输入输出模式
引脚电平:0V~3.3V,部分引脚可容忍5V
输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
引脚电平:0V~3.3V,部分引脚可容忍5V
什么是 5V 容忍(FT = Five-Volt Tolerant)
STM32 芯片供电是3.3V,普通 IO 引脚最高只能输入 3.6V,超过会击穿内部二极管、烧坏芯片;
标有FT的引脚内部做了特殊耐压电路,输入模式下可以直接接 5V 电平,不会烧毁芯片。
只有配置成【输入模式】时,FT 引脚才支持 5V 输入;一旦配置成推挽输出,绝对不能外接 5V!
GPIO基本结构
APB2 总线(紫色双向箭头)
APB2 是 STM32 高速外设总线,GPIOA、GPIOB、GPIOC、GPIOD、GPIOE全部挂载在这条总线上。
作用:CPU 通过 APB2 总线读写 GPIO 内部寄存器,实现引脚配置、电平读写。
黄色双向箭头(寄存器 ↔ 驱动器)
CPU 改写寄存器配置后,寄存器会控制驱动器电路切换工作模式;外部引脚电平变化也会通过驱动器反馈存入 IDR 输入寄存器,实现双向信号交互。
模式本质:配置 GPIO 模式,本质是修改寄存器,切换驱动器内部 MOS、上下拉电阻的通断;
GPIO模式
上拉输入
IPU = Input Pull-Up,内部自带上拉电阻的输入模式
引脚作为输入,用来读取外部按键、传感器高低电平;
芯片内部集成一个上拉电阻(约 30~50KΩ)接到 3.3V;
外部没接东西时,内部电阻自动把引脚拉到高电平,不会浮空乱跳。
STM32 通用推挽输出(GPIO_Mode_Out_PP)
先拆开两个词:推挽 + 通用输出
推挽(Push-Pull)
GPIO 内部有两个 MOS 管:
上管:接 VCC(高电平)
下管:接 GND(低电平)
输出高电平:上管导通,下管截止→ 引脚直接拉到 3.3V
输出低电平:下管导通,上管截止 → 引脚直接拉到 0V,
一推一拉,所以叫推挽
用 STM32 GPIO 控制(重点,你做外设驱动会用到)
场景 1:NPN 三极管驱动负载(继电器 / LED)图片下方
接线
发射极E → GND(有箭头的一方)
基极B → GPIO 引脚(串联 1k 限流电阻)
集电极C → 负载负极,负载正极接 3.3V/5V
控制逻辑
GPIO 输出高电平 (3.3V):Vb=3.3V > Ve=0V → 三极管导通,负载通电工作
GPIO 输出
低电平 (0V)
:Vb=Ve → 三极管截止,负载断电
适配 STM32 推挽输出,最常用方案
场景 2:PNP 三极管驱动负载,图片上方
接线
E → 3.3V/5V
B → GPIO 引脚(串联 1k 限流电阻)
C → 负载正极,负载负极接 GND
控制逻辑
GPIO 输出低电平 (0V):Ve=3.3V > Vb=0V → 三极管导通,负载通电
GPIO 输出
高电平 (3.3V)
:Ve=Vb → 三极管截止,负载断电
注意:3.3V 单片机控制 PNP,最大只能切换 3.3V 负载;若要控制 5V 负载,需搭配电平转换。
