STM32 逻辑分析仪实战:把 I2C/SPI/UART/CAN 抓成看得见的波形 串口打印能告诉你收到了什么但告诉不了你线上到底长什么样。我前阵子调一颗 I2C 温湿度传感器数据偶尔错一个字节串口打印看着一切正常换成示波器又只有两个通道分时间基根本对不上多根线。后来翻出吃灰的逻辑分析仪八根通道往总线上一夹PulseView 一点解码波形里那个偶尔被拉低的 SDA 一眼就现形了。这篇讲怎么用逻辑分析仪把 I2C、SPI、UART、CAN 四路总线全抓下来并避开那些新手必踩的坑。逻辑分析仪到底是个啥它本质是个多通道数字采样器。每根探针对应一个通道按你设的采样率不停地读高低电平按阈值判成 0 或 1存进内部 FIFO。你框一段出来软件PulseView 开源、Saleae Logic2 商用按协议规则把 0/1 流解码成字节、地址、ID直接铺在波形下面。示波器看的是模拟波形长啥样逻辑分析仪看的是数字信号发了啥。调通信协议后者更顺手。四路总线分别夹哪几根线不同总线占的通道数不一样规划好别把通道用光I2CSCL SDA两根线。两根都要夹解码器才能还原起始、地址、数据。SPISCK MOSI MISO CS四根线。CS 一定夹上否则多从机时分不清哪段是谁的。UARTTX RX两根线。自发自收时两根都夹能看清收发时序错开。CAN差分对逻辑分析仪是单端输入不能直接夹 CANH/CANL 当数字信号。正经做法是夹 MCU 的 CAN_TX / CAN_RX 引脚TTL 电平或者串一个 CAN 收发模块把总线转成单端。夹引脚最省事。抓之前采样率和触发采样率定生死。奈奎斯特只是底线抓数字协议一般要每比特采样 4 倍以上。115200 的 UART 每位约 8.7µs采样率至少 500kHz 才稳留余量直接上 1MHz 或更高。I2C 400k、SPI 上 MHz 同理往上翻。采样率不够窄脉冲被漏采解码直接乱码。更狠的是触发。你要的是出问题的那一瞬间不是上电后的前 3 秒安静总线。在软件里设触发条件比如 I2C 出现某个从机地址、UART 收到 0x0A、或者某个 GPIO 翻转的下降沿。配合代码里加的调试脚一触发就精准抓到事务现场。代码用 GPIO 翻转当触发标记想精准抓某次事务最实用的招是在代码里翻转一个空闲 GPIO让逻辑分析仪触发在这一跳上// 抓 I2C 读温湿度前翻转调试脚当触发点HAL_GPIO_TogglePin(DBG_GPIO_Port,DBG_Pin);// 下降沿 分析仪触发HAL_I2C_Mem_Read(hi2c1,DEV_ADDR,REG_TEMP,1,buf,2,100);HAL_GPIO_TogglePin(DBG_GPIO_Port,DBG_Pin);// 翻转回来这一脚不参与任何业务纯粹给分析仪当现在开始这段是我关心的。SPI、CAN 同理包在你想看的事务前后。解码截图长啥样软件解码后波形下面直接铺出协议字段。I2C 那行标出 Start(0xBE W) 到 Reg 0x00再到 Repeated Start(0xBF R)、Data 0x1A 0x2C、Stop。SPI 那行按 CS 低电平框出每一帧字节。UART 那行把十六进制翻译成 ASCII。CAN 那行解出 ID 0x123 加 8 字节数据。肉眼对不上代码时这玩意儿比打印快十倍。10 个真实翻车点1. 采样率设太低解码全是乱码。★ 头号坑。每比特采样不到 4 倍窄位被漏。SPI 跑 1MHz 就老老实实上 8MHz 以上采样率别抠门。2. 通道接反了。TX 夹到 RX、SCL 夹到 SDA解码器按错位时序硬解出来的东西驴唇不对马嘴。接线前对着芯片丝印把引脚名对一遍。3. 地线没夹。只夹信号不夹 GND参考电平漂采样到的电平忽高忽低波形抖成锯齿。分析仪的 GND 线必须接到板子同一个地。4. I2C 上拉没接线上永远是低。忘了上拉电阻SDA/SCL 被开漏永远拉不到高分析仪看到一根长低的线还以为器件死了。先量一下两根线空闲是不是高电平。5. SPI 没夹 CS多从机分不清帧。CS 不夹解码器不知道从哪到哪是一帧两个从机的数据糊在一起。每根 CS 都夹上。6. UART 波特率设错解出来是乱码 ASCII。软件里解码波特率必须和代码 huart 的波特率一字不差。你代码 115200、软件设 9600解出来全是怪字符。7. CAN 直接夹 CANH/CANL。差分线电平不在逻辑分析仪单端阈值里夹上去啥也采不到。要么夹 MCU 的 CAN_TX/CAN_RX 引脚要么经收发模块转单端。8. 触发没设抓了一屏幕安静总线。没触发条件仪器从上电开始录你关心的那笔事务淹没在前面几秒空波形里。设好触发地址、特定字节、GPIO 边沿再抓。9. 存储深度不够长帧抓不全。采样率高、录的时间长FIFO 一下写满后面的帧被截断。录长事务要么降采样率、要么调大存储深度。10. 解码器极性或位序选反。SPI 有 CPOL/CPHA 四种模式解码器和你实际模式不对字节整排错。I2C 偶尔遇到 7 位地址要不要左移也坑人。对照代码配置把解码参数调一致。收尾适合任何通信调不通、串口打印看不出时序的场景。I2C 偶尔错字节、SPI 丢第一个字节、UART 帧错位、CAN 发不出去夹上去解码一目了然。不适合纯模拟信号排查那种上示波器看波形细节。铁律三条采样率每比特至少 4 倍、GND 必须夹、触发条件设准再抓。把这三条焊死线上到底发了啥再也藏不住。逻辑分析仪把看不见的总线变成看得见的证据。把 I2C/SPI/UART/CAN 配合上它调通信基本告别盲猜。