第 5 章 · 通信接口:UART、I2C 与 SPI 章节摘要:前四章的一切都发生在芯片内部,这一章让它开口说话。UART 用两根线打印调试信息、对接上位机;I2C 用两根线挂起一串低速传感器;SPI 用四根线喂饱高速器件。本章把三种接口的帧结构、寄存器操作与硬件接线一次讲透,并用寄存器级代码完成串口收发和 I2C 读传感器。通信打通之后,"打印调试"与"读取外界数据"两大工程刚需同时到位。 本章学习目标 读完本章并完成后,你应当能够: 手算 USART 波特率寄存器 BRR 的值,并说出时钟偏差超过百分之几会开始误码; 用状态寄存器的 TXE/RXN 标志写出轮询式收发,并解释为什么发送等 TXE、接收等 RXNE;
章节摘要:前四章的一切都发生在芯片内部,这一章让它开口说话。UART 用两根线打印调试信息、对接上位机;I2C 用两根线挂起一串低速传感器;SPI 用四根线喂饱高速器件。本章把三种接口的帧结构、寄存器操作与硬件接线一次讲透,并用寄存器级代码完成串口收发和 I2C 读传感器。通信打通之后,"打印调试"与"读取外界数据"两大工程刚需同时到位。
读完本章并完成后,你应当能够:
三种接口是三种性格:UART 各发各的、约好波特率就互不理睬,适合点对点的人机对话;I2C 主从分明、地址寻址、线少但慢,适合低速传感器网络;SPI 主导一切、线多但快,适合屏幕、Flash 这类吞吐大户。三者都围绕同一个骨架运转——状态寄存器报告"我好了没",数据寄存器管搬运,配置寄存器定格式。
一句话记住本章:协议是"怎么说话",寄存器是"话筒与耳朵",状态位是"轮到我了吗"。

5.1 UART 串口:寄存器级收发 —— 最常用的调试生命线。帧格式、波特率寄存器的算法、TXE/RXNE 标志的轮询收发,以及把 printf 接到串口的转折点。
5.2 I2C 与 SPI:接传感器 —— 进军器件世界。I2C 的时序与寻址配上寄存器级读传感器实战,SPI 的四种模式与适用场景,末尾给出三接口选型表。
一个贯穿本章的观察视角提前立住:三种接口的差异本质是"同步方式的差异"。UART 异步,靠约定波特率各自掐表;SPI 同步,主机直接发时钟带着数据走;I2C 半同步,时钟由主机给、应答由从机回。理解这一层,你会发现所有串行总线协议——包括后面的 CAN、USB——都在回答同样三个问题:时钟谁给、谁先说话、说错了怎么办。本章养成"按这三个问题拆协议"的习惯,以后学任何新总线都只是换术语。
本章实验所需硬件都很便宜,一次备齐:USB 转 TTL 串口模块一只(CH340 或 CP2102 芯片的都行,这是串口实验的桥);I2C 接口传感器一颗——光照传感器 BH1750 或温湿度传感器 SHT 系列都是好选择,模块板上通常已焊好上拉电阻;一片 I2C 接口的 24Cxx 系列 EEPROM,5.2 节讲解线与机制时可以拿来当多从机实验的第二从设备;杜邦线若干。软件侧,一个串口终端工具(带十六进制显示的更佳)是调试 I2C 时序之外的必备眼睛。GPIO 与定时器章节的板子继续沿用,无需另购。
先 UART 后 I2C/SPI,依据是"先救命后发展"。串口是嵌入式第一调试工具,没有它,后面所有驱动开发都退化成盲调;所以 5.1 独占一节,把收发打通、printf 接上。5.2 再面对"芯片之外的器件":I2C 走一遍完整的协议时序与应答机制(这是学习任何总线协议的标准样本),SPI 用对照方式讲完。两节合起来,你将能独立完成"传感器数据 → 串口打印 → 上位机观察"的完整数据通路——这是绝大多数嵌入式项目的最小闭环。
需要的储备:第 2 章的寄存器指针与 volatile、第 3 章的开时钟套路、第 4 章的标志位等待模式。硬件上备一只 USB 转串口模块和一颗 I2C 接口的常用传感器(光照、温湿度皆可,十元级别)。往后看:第 6 章 FreeRTOS 的任务间通信演示用队列传递"串口收到的字节",第 7 章 OTA 的固件包从网络落地后经串口报告进度。MQTT、蓝牙这些高级协议,最终都要踩着某个物理接口跑——这一章就是所有"高层协议"的地板。