您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



文章 咨询 工具 课程  
会员   
   
嵌入式软件架构-高级实践
12月11-12日 北京+线上
LLM大模型与智能体开发实战
12月18-19日 北京+线上
需求分析与管理
2026年1月22-23日 北京+线上
     
   
 订阅
通信篇:一篇易懂的CAN通信详解,让你彻底理解CAN通信
 
作者:StephenDY
  15   次浏览      4 次
 2025-11-25
 
编辑推荐:
本文主要介绍了CAN总线的基础知识,包括其硬件电路实现、电平标准和各种帧格式,希望对您的学习有所帮助。
本文来自于壹零肆工作室,由火龙果软件Alice编辑、推荐。

引言: 对于CAN这篇我计划分为两个篇幅来讲,一篇讲CAN的硬件电路实现和帧格式,另一篇讲代码的具体实现。 一、简介( 了解一下就行 ):

CAN总线(ControllerArea Network Bus)控制器局域网总线CAN总线是由BOSCH公司开发的一种简洁易用、传输速度快、易扩展、可靠性高的串行通信总线,广泛应用于汽车、嵌入式、工业控制等领域,下面的图片是高速CAN和低速CAN的对比:

CAN总线特征( 需要记住 ):

  • 两根通信线(CAN H、CAN L),线路少,无需共地差分信号通信,抗干扰能力强
  • 高速CAN(ISO11898):125k~1Mbps,<40m
  • 低速CAN(ISO11519)10k~125kbps,<1km
  • 异步,无需时钟线,通信速率由设备各自约定
  • 半双工,可挂载多设备,多设备同时发送数据时通过仲裁判断先后顺序11位/29位报文ID,用于区分消息功能,同时决定优先级
  • 可配置1~8字节的有效载荷
  • 可实现广播式和请求式两种传输方式
  • 应答、CRC校验、位填充、位同步、错误处理等特性

二、硬件电路( 了解一下就行 )

  • 每个设备通过CAN收发器挂载在CAN总线网络上
  • CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CANH和CAN L分别与总线的CAN H和CANL相连
  • 注 :在STM32中的CAN外设电路,CAN控制器只会引出TX和RX两个引脚,这两个引脚不能直接引在CAN总线,必须通过CAN收发器来引入。
  • 此时就会有小伙伴问了, STM32不是有两个引脚是can通信的嘛?为什么还需要一个can收发器来进行通信,而不是直接用这两个引脚啊?
  • 答: 因为CAN协议设计的有回读机制,CAN_TX和RX引脚电平也不是差分信号

那又有人问了,为什么不把 CAN收发器芯片也集成到STM32里呢?

答:母鸡啊,可能因为电平标准不一样或者为了保护、隔离电路吧

  • 高速CAN使用 闭环 网络: CAN H和CAN L两端添加120欧的终端电阻
  • 低速CAN使用 开环 网络:CAN_H和CAN_L其中一端添加2.2千欧的终端电阻

左侧为闭环高速CAN,右侧是开环低速CAN

三、CAN电平标准( 需要弄明白 )

CAN总线采用差分信号,即两线 电压差 (Vh-Vl) 传输数据位

  • 高速CAN规定:
    • 电压差为0V时表示 逻辑1(隐性电平)
    • 电压差为2V时表示逻辑0 (显性电平)
  • 低速CAN规定:
    • 电压差为-1.5V时表示逻辑1(隐性电平)
    • 电压差为3V时表示逻辑0(显性电平)

四、CAN总线帧格式( 要弄明白 )

1.数据帧 ( 好好看 )

  • 用途:发送设备主动发送数据,属于广播式的通信方式
  • 格式: 分为 标准格式和扩展格式两种格式

图例解析:

  • 灰色部分D表示显性电平0
  • 白色部分R表示隐性电平1
  • 紫色部分D/R表示根据发送数据的不同,可以选择显性电平0或隐性电平1
  • 白色和灰色部分(ACK)是应答位特有的,发送方必须发隐性1,接收方必须发送显性0
  • 图例中间的数字表示此段时序所占的位数

设计者的思路 ( 看一遍 ) :

  • 需要设计一个波形承载波段,那必然有数据段,
  • 又想要几个数据段的几个字节是可调的,所以加了 DLC ,用于指定数据段的长度
  • 为了区分数据的功能,就在前面加了 ID 号
  • 为了实现广播式,类似只写,或者请求式,类似读取,就有了 RTR 位进行区分
  • 为了判断数据是否正确传输,就有了 CRC 校验
  • 为了判断是否有接收方,就有了 ACK 应答设计
  • IDE 和 r0 是保留位,为了后续升级,现在的 IDE 用于区分标准帧和扩展帧格式
  • 最后整个波形前面套上起始,后面套上结束,这个伟大的波形设计就大功告成了

扩展格式: 当标准格式的11位ID不够用时,就用到了扩展格式,且扩展格式也要保持对标准格式的兼容。 在上图可以看到标准格式的RTR挪到了老后面,原来标准格式的RTR的位置就空出来了,但是这一位也不能当做别的用途,是为了保证仲裁规则中,标准格式的优先级高于扩展格式,这一位SRR虽然没用,但必须要给隐形电平1,至于仲裁流程,后续再说。 然后就是IDE了,扩展格式要为隐性1。 最后做个总结( 枯燥无味,不看了 ):

SOF 帧起始,表示后面一段波形为传输的数据位
ID 标识符,区分功能,同时决定优先级
RTR 远程请求位,区分数据帧和遥控帧
IDE 扩展标志位,区分标准格式和扩展格式
SRR 替代RTR,协议升级时留下的无意义位
r0/r1 保留位,为后续协议升级留下空间
DLC 数据长度,指示数据段有几个字节
Data 数据段的1~8个字节有效数据
CRC 循环冗余校验,校验数据是否正确
ACK 应答位,判断数据有没有被接收方接收
CRC/ACK 界定符 为应答位前后发送方和接收方释放总线留下时间
EOF 帧结束,表示数据位已经传输完毕

2.遥控帧 ( 稍微看一下 )

知道了数据帧,看这个遥控帧应该就很简单:

遥控帧无数据段,RTR为隐性电平1,其他部分与数据帧相同

3.错误帧 ( 了解即可 )

总线上所有设备都会监督总线的数据,一旦发现“位错误”或“填充错误"或“CRC错误”或“格式错误”或“应答错误”,这些设备便会发出错误帧来破坏数据,同时终止当前的发送设备

4.过载帧 ( 了解即可 )

当接收方收到大量数据而无法处理时,其可以发出过载帧,延缓发送方的数据发送,以平衡总线负载,避免数据丢失

5.帧间隔 ( 了解即可 )

将数据帧和远程帧与前面的帧分离开

五、位填充( 要弄明白 )

规则: 发送方每发送5个相同电平后,自动追加一个相反电平的填充位,接收方检测到填充位时,会自动移除填充位,恢复原始数据。如:

位填充作用:

  • 增加波形的定时信息,利于接收方执行“再同步”,防止波形长时间无变化导致接收方不能精确掌握数据采样时机
  • 将正常数据流与“错误帧"和“过载帧”区分开,标志“错误帧"和“过载帧”的特异性
  • 保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲
   
15   次浏览       4 次
相关文章

中央计算的软件定义汽车架构设计
汽车电子控制系统中的软件开发过程
一文读懂汽车芯片-有线通信芯片
OTA在汽车上有哪些难点痛点?
相关文档

汽车设计-汽车的整体结构及动力系统
自动驾驶汽车软件计算框架
SysML在汽车领域的应用实践
电子电气架构-大陆汽车系统架构平台
相关课程

AutoSAR原理与实践
功能安全管理体系(基于ISO26262)
MBSE(基于模型的系统工程)
基于SOA的汽车电子架构设计与开发

最新活动计划
基于模型的数据治理与中台 11-11[北京]
软件架构设计方法、案例实践 11-13[北京]
AI智能化软件测试方法与实践11-20[北京]
UML与面向对象分析设计 11-25[北京]
LLM大模型与智能体开发实战 11-13[北京]
配置管理方法、实践、工具 12-11[北京]
 
 
最新文章
ASPICE中配置管理是个什么东西?
了解软件安全分析与组件鉴定
掌握Autosar ComStack的精髓!
基于整车功能的正向诊断需求开发
搞定Autosar SWC开发秘籍,码住!
汽车OTA更新的系统性威胁评估
最新课程
基于SOA的汽车电子架构设计与开发
Auto SAR原理与实践
AUTOSAR架构与实践(从CP到 AP )
AUTOSAR架构建模方法与工具(EA)
ASPICE4.0核心开发过程指南
MBSE(基于模型的系统工程)
更多...   
成功案例
某知名车企 AUTOSAR应用设计与开发
吉利汽车 MBSE工程体系汽车建模及评估
某整车企业 《功能需求分析与设计》
富奥汽车零部件 建模工具EA
零跑汽车 建模工具EA及服务
北汽福田 建模工具EA
小鹏汽车 建模工具EA
更多...