1. 课程导论与硬件基础:串口与I2C协议概述、常用传感器选型、开发板与调试工具介绍

各位同学,欢迎来到这门实战课。我是你们的老朋友,一个在嵌入式底层摸爬滚打了十几年的工程师。

说实话,每次带新人,我第一个要他们搞定的就是串口和I2C。为什么?因为这两个协议几乎覆盖了90%的传感器通信场景。你想想看,从最简单的温湿度传感器,到复杂的九轴姿态模块,不是走UART就是走I2C。搞懂了它们,你就拿到了嵌入式开发的半张入场券。

这一章,我们不急着写代码。先把地基打牢——协议怎么工作的?传感器怎么挑?工具怎么用?这些我踩过的坑,今天一次性讲清楚。

1.1 串口通信协议:从物理层到应用层

串口,全称串行通信接口。说白了,就是一根线发数据,一根线收数据,再加一根地线。简单,但可靠。

我刚开始做项目时,总觉得串口太“古老”了,速度又慢。直到有一次在强干扰的工业现场,SPI死活调不通,最后靠115200波特的串口把数据稳稳定定地传了出来。嗯,从那以后我再也不敢小看它了。

1.1.1 关键参数

参数 说明 常见值
波特率 每秒传输的符号数 9600, 115200, 921600
数据位 一帧中有效数据的位数 7, 8
停止位 帧结束标志 1, 1.5, 2
校验位 奇偶校验或无校验 None, Even, Odd
个人习惯: 调试阶段一律用115200-8-N-1。这个组合兼容性好,速度够快,大部分串口工具默认就是这个配置。等产品定型了再根据功耗和线长去优化。

1.1.2 电平标准

这里有个坑,我必须提醒你。MCU出来的通常是TTL电平(0V/3.3V或5V),而电脑的串口是RS-232电平(-12V/+12V)。直接连?烧芯片是小事,搞不好把电脑主板也带走。

我曾经见过一个实习生,拿着USB转串口线直接怼到STM32的PA9和PA10上,结果芯片冒烟了。后来才知道,他买的那根线是RS-232电平的,不是TTL。

避坑指南: 买USB转串口模块时,一定要确认是“TTL电平”还是“RS-232电平”。开发调试用CH340或CP2102的模块,便宜又稳定。

1.2 I2C总线协议:两根线的艺术

I2C,Inter-Integrated Circuit。飞利浦公司发明的,初衷就是让芯片之间用最少的线通信。两根线:SCL(时钟)和SDA(数据)。

你可能会问:两根线怎么传数据?答案是“主从架构”。主设备产生时钟,从设备响应。每个从设备都有一个唯一的7位或10位地址。

1.2.1 通信流程

  1. 起始条件: SCL高电平时,SDA从高变低。
  2. 发送地址: 主设备发送7位从机地址 + 1位读写位。
  3. 从机应答: 从机拉低SDA表示ACK。
  4. 数据传输: 每8位数据后跟一个ACK/NACK。
  5. 停止条件: SCL高电平时,SDA从低变高。

关键点: I2C是开漏输出,所以必须加上拉电阻。阻值怎么选?

  • 标准模式(100kHz):4.7kΩ
  • 快速模式(400kHz):2.2kΩ
  • 高速模式(1MHz以上):1kΩ或更小

我一般先焊4.7kΩ,如果波形上升沿太缓再换小。别一上来就用1kΩ,功耗会大不少。

1.2.2 串口 vs I2C:怎么选?

对比项 串口 (UART) I2C
线数 2根(TX/RX) 2根(SCL/SDA)
通信方式 点对点 多主多从
速度 最高可达数Mbps 标准100kHz,快速400kHz
距离 RS-232可达15米 通常1米以内
典型传感器 GPS模块、激光雷达 温湿度、加速度计、磁力计

我的经验是:如果只接一个传感器,距离又近,优先用I2C。如果传感器在另一个板子上,或者需要长距离传输,串口更靠谱。

1.3 常用传感器选型指南

选传感器,说白了就是看三个指标:精度、功耗、接口。我见过太多人为了省几毛钱,选了精度不够的传感器,结果整个产品重做。

1.3.1 温湿度传感器

型号 接口 精度 功耗 价格
DHT11 单总线 ±2°C, ±5%RH 中 极低
DHT22 单总线 ±0.5°C, ±2%RH 中 低
SHT30 I2C ±0.3°C, ±2%RH 低 中
BME280 I2C/SPI ±1°C, ±3%RH 极低 中
我的建议: 做产品别用DHT11,精度太差,而且时序要求苛刻,容易受中断影响。SHT30或BME280是更好的选择,I2C接口,驱动好写,精度也够。

1.3.2 运动传感器

  • MPU6050: 六轴(加速度+陀螺仪),I2C接口。经典款,资料多,适合入门。
  • MPU9250: 九轴(加速度+陀螺仪+磁力计),I2C/SPI。注意:这颗芯片有假货,买的时候要小心。
  • ICM-20948: 九轴,低功耗,性能比MPU9250好,价格也贵一些。

我记得有一次做平衡车项目,用了MPU6050,结果车子老是抖。查了两天,发现是I2C速率太高,传感器丢数据了。降到200kHz,问题解决。嗯,有时候不是芯片不行,是你没把它伺候好。

1.4 开发板与调试工具介绍

工欲善其事,必先利其器。工具选对了,调试效率翻倍。

1.4.1 开发板推荐

开发板 主控 串口数量 I2C数量 适用场景
STM32F103C8T6 Cortex-M3 3 2 入门、工业控制
ESP32 Xtensa LX6 3 2 物联网、WiFi/蓝牙
Arduino Uno ATmega328P 1 1 原型验证、教学
Raspberry Pi Pico RP2040 2 2 低成本、MicroPython

我个人最常用的是STM32F103和ESP32。前者稳定可靠,后者自带无线,做物联网项目很方便。

1.4.2 调试工具清单

  1. 逻辑分析仪: 必备!别跟我说你用示波器看I2C波形,那效率太低了。买个24MHz 8通道的,也就几十块钱。我用的Saleae逻辑分析仪,虽然贵点,但软件好用,还能解码I2C、SPI、UART。
  2. USB转串口模块: CH340或CP2102,多备几个。注意区分3.3V和5V版本。
  3. 万用表: 测电压、测通断、测电阻。调试I2C时,先量SCL和SDA的上拉电压对不对。
  4. 示波器: 如果预算够,买个双通道100MHz的。看时序、测信号完整性,示波器还是王道。
避坑指南: 我曾经用一根劣质的USB线连接逻辑分析仪,结果采集到的I2C波形全是毛刺。换了根带屏蔽的USB线,波形瞬间干净了。线材的质量,有时候比仪器本身还重要。

1.5 本章知识体系

下面这张图,把本章的核心知识点串起来了。你可以把它当作一张地图,后面每学一章,都可以回来对照一下。

第一章知识体系图 第一章:课程导论与硬件基础 串口通信协议 I2C总线协议 传感器选型与工具 波特率 · 数据位 · 停止位 · 校验 TTL电平 vs RS-232电平 SCL · SDA · 主从架构 起始条件 · 地址 · 应答 · 停止 上拉电阻选择(4.7kΩ / 2.2kΩ) 温湿度 · 运动 · 环境传感器 开发板:STM32 · ESP32 · Arduino 逻辑分析仪 · 示波器 · 万用表 核心目标:掌握串口与I2C协议基础 能够独立完成传感器选型与调试环境搭建

这张图把本章的三个核心模块串起来了。左边是串口,中间是I2C,右边是传感器和工具。箭头表示它们之间的关联——比如I2C传感器需要上拉电阻,调试时需要逻辑分析仪。你可以在后续学习中随时回来对照,看看自己学到哪一步了。