stm32/comm/rs485-can-i2c-usbttl.md

通信接口调试速查(RS485 / CAN / I2C / USB-TTL)

知识库 · STM32 📅 初版 2026-09-12

通信接口调试速查(RS485 / CAN / I2C / USB-TTL)

STM32 常用通信接口速查:电平标准、接线、帧格式、调试排错清单。RS232 单线已另有专文,本篇覆盖其余四类。

#一、元信息

字段值
芯片/平台STM32F103C8T6(HAL)
接口类型RS485 / CAN / I2C / USB-TTL(多接口速查)
验证状态❌ 未验证(AI 整理草稿,待实测)
验证环境—
驱动方式HAL(含中断 / DMA 思路)

#二、RS485(差分,多点总线)

  • 电平:A/B 差分,±200mV 判 0/1;逻辑 1 = A>B,逻辑 0 = A<B。非 TTL,必须收发器(SP3485/MAX485)。
  • 接线:A 对 A、B 对 B;总线两端各加 120Ω 终端电阻;多点总线所有节点并联 A/B。
  • 方向控制:DE/RE 控制收发方向(半双工),发送前拉高 DE,发完拉低。常见坑:忘了切方向 → 收不到自己发的/总线冲突。
  • 拓扑:一主多从,主问从答;地址区分从机。距离远、节点多时降波特率(≤115200 常用)。
  • 踩坑:终端电阻漏接 → 长距离反射误码;A/B 反接 → 全乱;共地问题 → 地电位差烧毁接口(长距离加隔离)。

#三、CAN(差分,工业/车载)

  • 电平:CAN_H / CAN_L 差分,隐性(2.5V 均压)/ 显性(CAN_H↑ CAN_L↓)按"线与"仲裁。
  • 接线:CAN_H 对 CAN_H、CAN_L 对 CAN_L;两端 120Ω 终端。
  • 帧:标准帧 11 位 ID、扩展帧 29 位 ID;ID 小的优先级高(非地址,是优先级)。
  • 驱动:STM32 内置 bxCAN,用 HAL_CAN;需配波特率(同步段/BS1/BS2/分频)和滤波器(屏蔽/列表)。
  • 踩坑:终端电阻漏 → 通信失败;波特率两端不一致 → 满帧错误;收发器 3.3V/5V 电平匹配(如 TJA1050 需 5V 逻辑时注意)。

#四、I2C(两线,板级低速)

  • 电平:SDA/SCL 开漏 + 上拉(通常 4.7kΩ 到 3.3V)。必须上拉,否则不出波形。
  • 接线:SDA→SDA、SCL→SCL,所有从机并联;地址由硬件 A0/A1/A2 或固定。
  • 协议:起始→地址(7位)+R/W→ACK→数据→…→停止。时钟由主机产生。
  • 速率:标准 100k、快速 400k。
  • 踩坑:忘记上拉电阻 → 总线卡死;地址算错(7 位地址左移 1 位加 R/W 才是写进寄存器的字节);从机无 ACK → 地址错/没上电/速率过高;多从机地址冲突;SDA 被从机拉低不放 → 需时钟恢复(主机多发几拍 SCL)。

#五、USB-TTL(USB 转串口,调试下载两用)

  • 电平:模块侧 TTL(3.3V/5V 可切换);板子侧接 MCU 的 USART 引脚。
  • 接线:模块 TX→板 RX、模块 RX→板 TX、共地;交叉!
  • 芯片:FT232RL / CH340 / CP2102。CH340 便宜常用,装驱动即可。
  • 用途:串口打印调试、ISP 下载(部分 MCU)、与 PC 通信。
  • 踩坑:TX/RX 接反 → 无输出;不共地 → 乱码;USB 口供电不足 → 模块掉线;波特率两端不一致 → 乱码。

#六、通用调试排错清单

  1. 先确认物理层:TX/RX 是否交叉、是否共地、电平标准是否匹配(TTL≠RS232≠RS485≠CAN)。
  2. 示波器/逻辑分析仪看波形:有没有波形、电平对不对、有没有上拉。
  3. 波特率/时钟两端一致;USART 在 APB1(36M)/APB2(72M) 不同总线,算错波特率会乱码。
  4. 先回环自测:USART 短接 TX-RX 自发自收,隔离是软件还是硬件问题。
  5. 地址/极性/方向类参数,逐条对照手册和接线图。

#七、参考库/链接

  • 洋桃1号 A5 周围电路手册(RS485/CAN/I2C/USB-TTL 章节)
  • ST 应用笔记 AN4481(bxCAN)、UM10204(I2C 官方规范)

#八、更新日志

📝共 1 条记录
日期类型更新内容
2026-09-12新增首次建档:RS485/CAN/I2C/USB-TTL 速查 + 通用排错清单