CAN 通信的基本原理与 STM32 实现方法详解

前言

CAN(Controller Area Network,控制器局域网络)作为一种高可靠性的现场总线,由德国 BOSCH 公司开发并逐步成为国际标准(ISO11519、ISO11898)。其凭借抗干扰强、错误检测能力突出等优势,广泛应用于汽车电子、工业控制等恶劣环境。本文将从 CAN 协议基础、STM32 CAN 控制器特性、CubeMX 配置到实战测试,全方位讲解 CAN 通信的原理与实现,附带完整代码示例,适合嵌入式开发者快速上手。

一、CAN 协议核心概念

1.1 CAN 协议简介

CAN 总线是一种多主方式的串行通信总线,无需主机协调即可实现多节点间的数据交互。它不仅是汽车电子控制系统的标准总线,衍生出的 J1939 协议更是专为大型货车和重工机械设计。相较于 I2C、SPI 等总线,CAN 总线在长距离传输、抗电磁干扰方面表现更优,且节点扩展无需修改原有系统,灵活性极强。

1.2 CAN 物理层

CAN 采用异步通信方式,仅通过 CAN_High 和 CAN_Low 两条差分信号线传输数据,物理层的核心特性如下:

1.2.1 两种总线网络拓扑

网络类型

遵循标准

最大传输距离

最高速率

总线要求

适用场景

闭环总线

ISO11898

40m

1Mbps

两端各接 120Ω 终端电阻

高速近距离场景(如汽车内部模块)

开环总线

ISO11519 - 2

1km

125kbps

两根总线各串联 2.2kΩ 电阻

低速远距离场景(如工业传感器组网)

1.2.2 通讯节点结构

CAN 通讯节点由CAN 控制器CAN 收发器组成,典型硬件连接如下:

  1. 控制器(如 STM32 内置 bxCAN)通过 CAN_Tx/CAN_Rx 与收发器连接,传输 TTL 电平信号;
  2. 收发器(如 TJA1050)将 TTL 电平转换为差分信号,通过 CAN_H/CAN_L 接入总线;
  3. 示例:STM32 的 CAN 外设作为控制器,外接 TJA1050 收发器构成完整节点,类似串口与 MAX3232 的电平转换逻辑。
1.2.3 差分信号优势

差分信号通过两根信号线的电压差值表示逻辑状态,相比单端信号有三大核心优势:

  1. 抗干扰能力强:外界噪声同步耦合到两根信号线,接收端仅关注差值,可抵消共模噪声;
  2. 低电磁辐射:两根信号线相位相反,辐射的电磁场相互抵消,降低对周边设备的干扰;
  3. 时序精准:以两信号交点作为开关变化点,受温度、工艺影响小,适合低幅度信号传输。
1.2.4 CAN 差分信号定义

高速 CAN 的电平规范如下:

逻辑状态

CAN_H 电压

CAN_L 电压

电压差(VH - VL)

隐性电平(逻辑 1)

2.5V

2.5V

0V

显性电平(逻辑 0)

3.5V

1.5V

2V

总线特性:显性电平优先级高于隐性电平。若多个节点同时发送信号,显性电平会覆盖隐性电平,这是 CAN 总线仲裁机制的核心基础。

1.3 CAN 协议层

1.3.1 位同步与波特率

CAN 无时钟信号,节点通过波特率约定位同步保障通信同步:

  1. 位时序分解:每个数据位分为 4 段,总长度为 8 - 25 个最小时间单位 Tq
    • 同步段(SS):1Tq,检测总线跳变沿实现同步;
    • 传播段(PTS):1 - 8Tq,补偿网络物理延时;
    • 相位缓冲段 1(PBS1):1 - 8Tq,补偿边沿误差,可加长;
    • 相位缓冲段 2(PBS2):2 - 8Tq,补偿边沿误差,可缩短。
  1. 波特率计算:波特率 = 1 / 单个数据位时间,单个数据位时间 = (SS + PTS + PBS1 + PBS2) × Tq
  2. 同步方式
    • 硬同步:帧起始时通过跳变沿校准时序;
    • 重新同步:通过数据位跳变沿动态调整 PBS1/PBS2 长度,补偿时序偏移。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值