第9课(总):GPIO 与通信接口总览

硬件学习路线 · 第九课按接口分开讲:本页先讲 GPIO 和通信的基本分类,然后依次是 UART、RS485、SPI、I²C(各一页)

一、为什么要"通信"?

单片机自己只能算,要和外面打交道,就必须通过接口:读取传感器的数据、控制电机和继电器、和电脑或其他单片机交换信息、驱动屏幕。接口就是单片机的"嘴巴"和"耳朵"。

类比:单片机像一个只会思考的大脑,接口是它的手和嘴。GPIO 是最简单的一根"手指",只能表达"是"或"否";UART、SPI、I²C 则是几种"语言",可以把复杂的信息按规则说出来。选哪种语言,取决于要说多远、说多快、要用几根线。

二、通信的四种分类

学任何一种接口之前,先要认清它属于哪一类。下面四组概念,几乎覆盖了所有通信方式。

分类两种情况通俗理解
并行 / 串行并行:多根线同时传多位;串行:一根线一位一位传并行像多车道同时走,串行像一条车道排队过
同步 / 异步同步:有公共时钟线(如 SPI、I²C);异步:没有时钟线,靠约定速率(如 UART)同步像大家跟着同一个节拍器打拍子;异步像各自数着相同速度的秒
单工 / 半双工 / 全双工单工:只能一个方向;半双工:两个方向轮流;全双工:同时双向单工像单行道,半双工像对讲机,全双工像电话
点对点 / 总线点对点:两个设备直接相连;总线:多个设备挂在同一组线上点对点像两人对话,总线像一个会议室
记住这张表的用法:看到一个接口,先问三个问题:它是串行还是并行?它有没有时钟线(同步还是异步)?它能挂几个设备(点对点还是总线)?这三个问题的答案,基本就决定了它的特性。

三、GPIO:最基础的接口

GPIO(General Purpose Input Output,通用输入输出)是单片机的每一个引脚都可以配置的基本功能:要么输出高电平或低电平,要么读取外部的高低电平。

💡
输出控制 LED 亮灭、继电器吸合、三极管和 MOS 管的开关(第4课)
🔘
输入读取按键、限位开关、比较器输出(第5课、第6课)
🔀
复用功能同一个引脚可以切换为 UART、SPI、I²C 等功能引脚,这就是"复用"
复用是单片机的常态:一个引脚在某一时刻只能做一件事。如果你把某脚设为 UART 的发送,它就不能再当普通的 GPIO 输出。配置引脚时要查引脚复用表(Alternate Function),避免两个功能抢同一根线。

四、GPIO 的输出与输入结构

同样是"输出一个 1",GPIO 内部的电路结构不同,外部看到的效果也不同。理解这一点,是正确接线的关键。

4.1 输出结构

结构内部怎么工作能做什么典型用途
推挽(Push-Pull)上管与下管轮流导通,输出 1 时接电源,输出 0 时接地能主动拉高,也能主动拉低,驱动能力强LED、三极管基极、普通数字输出(默认模式)
开漏(Open-Drain)只有下管,输出 0 时拉到地,输出 1 时"放开"(高阻)只能拉低;高电平要靠外部上拉电阻I²C 总线、多设备共用一根线、电平转换

4.2 输入结构

模式含义注意
浮空输入内部不加上拉也不加下拉,完全由外部决定外部没接东西时,电平不确定,会乱跳(第6课讲过)
上拉输入内部接一个约几十 kΩ 的电阻到电源,平时读 1按键接地,按下时读 0,最常用
下拉输入内部接一个电阻到地,平时读 0外部接到 VDD 时才读 1
模拟输入把引脚断开数字电路,交给 ADC 读取电压用于采样传感器电压,见 ADC 课程
未用的引脚不要悬空:没用到的 GPIO,应当配置为输出,或者配置为带上拉/下拉的输入。悬空的输入脚像一根天线,会受干扰,增加功耗,甚至导致程序异常。

五、动手试一试:GPIO 模拟器

选择引脚的模式,再选择外部连接的东西,看引脚实际读到什么电平。这正是很多"按键不灵""LED 不亮""总线冲突"问题的根源。

引脚实际电压-
单片机读到的电平-

六、GPIO 的电流与电压限制

每个 GPIO 能提供或吸收的电流有限,超过就会发热、电压下降,甚至损坏。典型的数值(具体以所用芯片的数据手册为准):

指标含义常见量级
单脚最大电流一个引脚灌入或拉出的最大电流十几到二十几 mA
整组(端口)总电流同一组引脚加起来的上限几十到一百多 mA
电源电压范围IO 能承受的电压,不能超过 VDD 太多一般不能超过 VDD + 0.3 V 左右

6.1 LED 驱动:回忆第3课的限流计算

直接用 GPIO 驱动 LED 时,要算限流电阻。例:3.3 V 系统,红色 LED 压降 2.0 V,目标电流 5 mA:R = (3.3 − 2.0) / 0.005 = 260 Ω,取 270 Ω,实际电流约 4.8 mA,在引脚能力之内。

不要直接用 GPIO 驱动大负载:电机、继电器、大功率 LED 要用三极管或 MOS 管做中间级(第4课),GPIO 只提供控制信号。

七、五种接口总览对比

下面五种接口,后面每一种都会单独讲一页。先在这里看清它们的差别:

接口线数同步/异步双向拓扑距离(参考)速率(参考)典型用途
GPIO1 根 / 脚—可输入可输出点对点板内—开关、LED、按键
UART 串口2 根(TX、RX)+ GND异步全双工点对点板间,几米9600 ~ 几 Mbps调试打印、模块通信
RS4852 根差分(A、B)+ GND异步半双工总线,可挂 32 或更多可达 1200 m(低速)9600 ~ 10 Mbps工业现场、传感器网络
SPI4 根(SCK、MOSI、MISO、CS)+ GND同步全双工一主多从板内,几十厘米几 Mbps ~ 几十 MbpsFlash、屏幕、ADC、高速传感器
I²C2 根(SDA、SCL)+ GND同步半双工多主多从总线板内,几十厘米100 kbps ~ 1 MbpsEEPROM、温湿度、IMU、OLED
一个直观的规律:线越少,越省引脚,但速度和功能往往受限(I²C 只要两根线,但速度低);线越多,速度越快(SPI),但引脚开销大。RS485 为了远距离和抗干扰,选择了差分信号,代价是要加收发芯片。

八、怎么选接口?

🧪
要调试打印、连模块选 UART(TTL 电平),两根线即可,最容易上手
🏭
要走几十到上千米选 RS485,差分抗干扰,一主多从
⚡
要高速读写存储或屏幕选 SPI,速率高,全双工
🧩
要挂很多小传感器、省引脚选 I²C,两根线挂几十个器件,每个用地址区分
总结的思路:先看距离(板内还是板间,还是几百米),再看速度(几十 kbps 还是几十 Mbps),最后看引脚是否够用。满足三者的最简单接口,就是最好的选择。

九、小测验:GPIO 与通信总览

十、本节小结

接下来依次学习:第9课 · UART 串口 → RS485 → SPI → I²C