硬件学习路线 · 第九课按接口分开讲:本页先讲 GPIO 和通信的基本分类,然后依次是 UART、RS485、SPI、I²C(各一页)
单片机自己只能算,要和外面打交道,就必须通过接口:读取传感器的数据、控制电机和继电器、和电脑或其他单片机交换信息、驱动屏幕。接口就是单片机的"嘴巴"和"耳朵"。
学任何一种接口之前,先要认清它属于哪一类。下面四组概念,几乎覆盖了所有通信方式。
| 分类 | 两种情况 | 通俗理解 |
|---|---|---|
| 并行 / 串行 | 并行:多根线同时传多位;串行:一根线一位一位传 | 并行像多车道同时走,串行像一条车道排队过 |
| 同步 / 异步 | 同步:有公共时钟线(如 SPI、I²C);异步:没有时钟线,靠约定速率(如 UART) | 同步像大家跟着同一个节拍器打拍子;异步像各自数着相同速度的秒 |
| 单工 / 半双工 / 全双工 | 单工:只能一个方向;半双工:两个方向轮流;全双工:同时双向 | 单工像单行道,半双工像对讲机,全双工像电话 |
| 点对点 / 总线 | 点对点:两个设备直接相连;总线:多个设备挂在同一组线上 | 点对点像两人对话,总线像一个会议室 |
GPIO(General Purpose Input Output,通用输入输出)是单片机的每一个引脚都可以配置的基本功能:要么输出高电平或低电平,要么读取外部的高低电平。
同样是"输出一个 1",GPIO 内部的电路结构不同,外部看到的效果也不同。理解这一点,是正确接线的关键。
| 结构 | 内部怎么工作 | 能做什么 | 典型用途 |
|---|---|---|---|
| 推挽(Push-Pull) | 上管与下管轮流导通,输出 1 时接电源,输出 0 时接地 | 能主动拉高,也能主动拉低,驱动能力强 | LED、三极管基极、普通数字输出(默认模式) |
| 开漏(Open-Drain) | 只有下管,输出 0 时拉到地,输出 1 时"放开"(高阻) | 只能拉低;高电平要靠外部上拉电阻 | I²C 总线、多设备共用一根线、电平转换 |
| 模式 | 含义 | 注意 |
|---|---|---|
| 浮空输入 | 内部不加上拉也不加下拉,完全由外部决定 | 外部没接东西时,电平不确定,会乱跳(第6课讲过) |
| 上拉输入 | 内部接一个约几十 kΩ 的电阻到电源,平时读 1 | 按键接地,按下时读 0,最常用 |
| 下拉输入 | 内部接一个电阻到地,平时读 0 | 外部接到 VDD 时才读 1 |
| 模拟输入 | 把引脚断开数字电路,交给 ADC 读取电压 | 用于采样传感器电压,见 ADC 课程 |
选择引脚的模式,再选择外部连接的东西,看引脚实际读到什么电平。这正是很多"按键不灵""LED 不亮""总线冲突"问题的根源。
每个 GPIO 能提供或吸收的电流有限,超过就会发热、电压下降,甚至损坏。典型的数值(具体以所用芯片的数据手册为准):
| 指标 | 含义 | 常见量级 |
|---|---|---|
| 单脚最大电流 | 一个引脚灌入或拉出的最大电流 | 十几到二十几 mA |
| 整组(端口)总电流 | 同一组引脚加起来的上限 | 几十到一百多 mA |
| 电源电压范围 | IO 能承受的电压,不能超过 VDD 太多 | 一般不能超过 VDD + 0.3 V 左右 |
直接用 GPIO 驱动 LED 时,要算限流电阻。例:3.3 V 系统,红色 LED 压降 2.0 V,目标电流 5 mA:R = (3.3 − 2.0) / 0.005 = 260 Ω,取 270 Ω,实际电流约 4.8 mA,在引脚能力之内。
下面五种接口,后面每一种都会单独讲一页。先在这里看清它们的差别:
| 接口 | 线数 | 同步/异步 | 双向 | 拓扑 | 距离(参考) | 速率(参考) | 典型用途 |
|---|---|---|---|---|---|---|---|
| GPIO | 1 根 / 脚 | — | 可输入可输出 | 点对点 | 板内 | — | 开关、LED、按键 |
| UART 串口 | 2 根(TX、RX)+ GND | 异步 | 全双工 | 点对点 | 板间,几米 | 9600 ~ 几 Mbps | 调试打印、模块通信 |
| RS485 | 2 根差分(A、B)+ GND | 异步 | 半双工 | 总线,可挂 32 或更多 | 可达 1200 m(低速) | 9600 ~ 10 Mbps | 工业现场、传感器网络 |
| SPI | 4 根(SCK、MOSI、MISO、CS)+ GND | 同步 | 全双工 | 一主多从 | 板内,几十厘米 | 几 Mbps ~ 几十 Mbps | Flash、屏幕、ADC、高速传感器 |
| I²C | 2 根(SDA、SCL)+ GND | 同步 | 半双工 | 多主多从总线 | 板内,几十厘米 | 100 kbps ~ 1 Mbps | EEPROM、温湿度、IMU、OLED |
接下来依次学习:第9课 · UART 串口 → RS485 → SPI → I²C