stm32/comm/rs485-can-i2c-usbttl.md
通信接口调试速查(RS485 / CAN / I2C / USB-TTL)
通信接口调试速查(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 口供电不足 → 模块掉线;波特率两端不一致 → 乱码。
#六、通用调试排错清单
- 先确认物理层:TX/RX 是否交叉、是否共地、电平标准是否匹配(TTL≠RS232≠RS485≠CAN)。
- 示波器/逻辑分析仪看波形:有没有波形、电平对不对、有没有上拉。
- 波特率/时钟两端一致;USART 在 APB1(36M)/APB2(72M) 不同总线,算错波特率会乱码。
- 先回环自测:USART 短接 TX-RX 自发自收,隔离是软件还是硬件问题。
- 地址/极性/方向类参数,逐条对照手册和接线图。
#七、参考库/链接
- 洋桃1号 A5 周围电路手册(RS485/CAN/I2C/USB-TTL 章节)
- ST 应用笔记 AN4481(bxCAN)、UM10204(I2C 官方规范)
#八、更新日志
📝共 1 条记录
| 日期 | 类型 | 更新内容 |
|---|---|---|
| 2026-09-12 | 新增 | 首次建档:RS485/CAN/I2C/USB-TTL 速查 + 通用排错清单 |