STM32:CAN总线精髓:特性、电路、帧格式与波形分析详解

article/2025/6/22 12:58:56

声明:此博客是我的学习笔记,所看课程是江协科技的CAN总线课程,知识点都大同小异,我仅进行总结并加上了我自己的理解,所引案例也都是课程中的案例,希望对你的理解有所帮助!

知识点1【CAN总线的概述】

CAN总线(Controller Area Network Bus)控制器局域网总线

1、特点

  • 两根通信线(CAN_H CAN_L),线路少,无需共地

  • 差分信号通信,抗干扰能力强

  • 异步,无需时钟线,通信速率有收发双方决定

  • 半双工

  • 可挂载多设备,多设备同时发送需要经过仲裁判断先后顺序

    多个主控互相通信,设备间没有主从之分,所有设备平等

  • 11/29位报文ID,用于区分消息功能,同时决定优先级(29位为拓展格式)

  • 可配置1-8Byte的有效载荷(长度可以配置)

  • 可实现广播式和请求时两种传输方式

    广播式:发送方把数据发送给全部收方,谁要谁就拿走(最常用)

    请求式:发送方不主动发送数据,仅在接收方发出请求的时候,才会发出数据

  • 应答,CRC校验,位填充,位同步,错误处理等特征

2、主流通信协议对比

知识点2【CAN总线的硬件电路分析】

每个设备通过CAN收发器挂载在CAN总线网络上

CAN收发器主要实现:电平转换,输出驱动和输入采样几个功能

相接方式:CAN控制器有TX和RX两个引脚,直接与CAN收发器的RX,TX相连,无需交叉。CAN收发器的CAN_H,CAN_L直接与CAN总线的对应引脚直接相连

共有两种硬件电路网络,如下

1、高速CAN电路网络(闭环电路)

电阻的作用

防止回波反射,回波反射的影响:当电平跳变时会在电平边缘,有一个震荡的波形,影响传输数据的稳定性

没有设备操作时,当没有设备操作总线的时候,会将两总线电压“收紧”(讲两线的电压拉至同一水平:对应“1”电平),电阻小,收紧速率快,但是功耗也就会变高。

注意:当设备想要发送1的时候就表示设备不操作总线,发送0则代表设备操作总线,这也是设备发送0和1的方式

我们主要学习高速CAN总线

2、低速CAN电路网络(开环电路)

由于电路没有闭合,因此没有收紧作用,但是有防止回波反射的作用

3、CAN总线的点评标准

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

  • 高速CAN规定

    电压差为0V表示逻辑1(隐性电平)(收紧)

    电压插为2V表示逻辑0(显性电平)(张开)

  • 低俗CAN规定

    • 电压差为-1.5V表示逻辑1(隐性电平)(默认电平CAN_L高于CAN_H)
    • 电压差为3V表示逻辑0(显性电平)(CAN_H高于CAN_L)

时序电路图

4、CAN收发器内部框图

(1)收发器引脚图介绍

  • 特点

    1、5V供电

    2、TX,RX分别与 CAN控制器的TX,RX相连

    3、CAN_H,CAN_L与CAN总线相连

    4、Vref 用来配置参考电压,可以不连

    5、S用来配置高速模式还是静默模式,可以不连

(2)硬件图介绍

  • TX介绍

    通过①可知默认是发送高电平的,最终是由DRIVER控制其变化的

    当其输出1的时候,T1和T2都是关闭状态,此时由两个25千欧姆的电阻我们可以知道,此时的CAN_H与CAN_L都是0.5VCC,两线压差为0,即表示隐性电平(1)

    其当输出0的时候,T1和T2都是导通状态,此时VCC作用在CAN_H上,GND作用在CAN_L上,此时两线压差为VCC,即表示显性电平(0)

  • RX介绍

    ②部分是一个电压反相器,我下面将介绍。我们看RECEIVER,此时

    如果它输出高电平即压差VCC,到电压反相器处,T3截至,T4导通,此时RXD输出低电平(0)

    如果它输出低电平即压差0,到电压反相器处,T3导通,T4截至,此时TXD输出的是VCC(高电平)(1)

知识点3【CAN总线的帧格式】

数据帧:发送设备主动发送设备(广播式

遥控帧:接收设备主动请求数据(请求式

错误帧:某个设备检测到错误向其他设备通知错误

过载帧:接收设备通知其尚未做好接收准备

帧间隔:用于将数据帧和遥控帧前面的帧分隔开

我们主要学习数据帧,因为数据帧最复杂,且最常用,遥控帧与数据帧类似,可类比学习;错误帧,过载帧,帧间隔初学可不必关心,了解即可

1、数据帧

数据帧分为标准 和 拓展格式,它主要用IDE位区分。下面是标准格式的说明:

(1)SOF(Start of Frame) 1bit

帧起始,表示后面一段波形位传输的数据位

(2)仲裁段:ID + RTR 11bit + 1bit

ID:标识符,区分功能,同时决定优先级

范围:0x000 ~ 0x7FF

RTR:远程请求标志位,用来区分数据帧(0)还是遥控帧(1)

相同ID的数据帧和遥控帧,数据帧的优先级高于遥控帧,因为数据帧此位为0(0的优先级高于1)

(3)IDE 1bit

IDE:ID拓展标志位,用来区分是标准格式(0)还是拓展格式(1)

(4)r0 1bit

r0:保留位,必须为显性0

0的优先级高,能够标准数据优先级高于以后拓展的优先级

(5)DLC 4bit

DLC:表示数据段的长度,我们前面说有效载荷是1-8字节可以灵活转换,就是通过这一位控制的

(6)数据段 0~64bit

数据段:有效载荷,根据DLC分配长度,总位数需要是8的倍数

(7)CRC 15bit

CRC:循环冗余校验,校验位,15位,我在之前的博客介绍过方法

(8)CRC界定符 1bit

CRC界定符:必须是隐性电平(1):作为间隔符;保证发送方释放总线控制权

(9)ACK 1bit

ACK槽:应答,当发送方发送完数据的主要内容后,释放总线,总线位隐性状态,接收方收到数据,会在ACK槽这一位,把总线拉开(产生电压差),即显性状态,然后发送方会读取槽的状态——若为0,则说明有接收方,若为1,则说明发送失败,重发(需要配置),或者忽略

注意:此时可以有多个接收方共同操作ACK槽

(10)ACK界定符 1bit

ACK界定符:发送方发送1——目的:作为间隔符;保证接收方应答完后释放总线

(11)EOF

EOF:7个隐性(1),作为帧结束标志

注意事项

通过对数据帧的分析,我们可以知道:

1、数据帧并不是但由发送方单独完成的,而是收发方共同完成的。

2、数据帧是我们发送应答位之前,接收方就已经接收到了数据。即发送方的数据帧还没有结束,接收方就已经接收到了数据。

  • 补充:
    • CAN总线数据传输是边发边收从SOF后,每一位都会立即出现在CAN总线上。并且所有节点(包括目标接收节点和其他节点)在发送的同时又在监听总线。接收节点逐位接收发送节点发来的数据。
    • 我们上面说的是接收方接收到了数据,但仅限于接收到了,接收节点还会对数据进行处理CRC的校验,位同步,位填充移除等操作),并不意味着 接收节点已经确认数据数据有效,或者 已准备好使用数据,还需要结合其返回的ACK判断

3、CAN总线发送数据是高位先行

扩展格式

拓展格式出现的原因:标准格式的ID不够用了,需要拓展一些

SSR:隐性电平1

为1的原因:优先级低

IDE:隐性电平1,表示是拓展格式

扩展ID是29位的,因此它的范围是0x0000 0000 ~ 0x1FFF FFFF,注意最高位

下面有具体的案例 这里大家了解就好。

2、遥控帧

遥控帧与数据帧的区别:无数据段,RTR为隐性电平1

无数据段,但是DLC不一定为0,此时的DLC等于它请求的、期望接收方回复的数据帧的数据长度(0-8Byte)

遥控帧的流程:请求方发送发出遥控帧请求数据,遥控帧也是以广播的形式发出,但遥控帧包含请求ID,响应请求的一方通过相同ID识别此帧,并发送数据帧 反馈给请求方。可见遥控帧是一来一回两个过程。

3、错误帧

某个设备检测出错误时,向其他设备通知错误。

错误帧可以叠加在数据帧上,并且可以破坏数据帧的数据——发现此帧数据有误,就会破坏此数据,防止其他设备使用

4、过载帧

当发送方发送数据太快,接收方来不及接收,就会发出此帧。目的是延缓发送方的数据发送,避免数据丢失

由于数据是发送方主动发出的,接收方无法直接调整其发送频率,因此接收方就需要借助此方式 延缓 发送方的发送频率

将数据破坏掉,发送方发不出去,就会重发。在这个发送和破坏的过程中,数据数据频率就被降低了

它与错误帧的格式相同,但产生条件和代表的含义不同

5、帧间隔

帧间隔也分为主动错误和被动错误状态。

主动错误:帧间隔是3 位

被动错误状态:帧间隔是3 + 8位,进行延迟传输,以减少它发送的速率,并且将其置于仲裁不利的处境,尽量减少此设备干扰总线。

大家只要知道:连续发送数据帧时,会有一段帧间隔就行

知识点4【位填充处理】

1、位填充规则

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

2、位填充作用

(1)防止波形长时间不变化,导致接收方不能精确:内部需要借助跳变沿来矫正采样点(误差补偿);如果数据长时间没有变化,就不会有跳变沿,也就没有了采样点矫正过程,因此时钟偏差一点都会导致数据错误。

(2)将正常数据流 与{”错误帧“ 和”过载帧“}区分开,保证正常数据流不会出现6个即6个以上的相同电平。以保证**”错误帧“ 和”过载帧“**叠加在数据帧之上时立刻就能发现它们。

(3)保证CAN总线在发送正常数据流的活跃状态,防止被误认为总线空闲

CAN总线规定:出现连续11个1后,被认为总线空闲

3、案例说明

注意事项

位填充插入的数据位 会与 后续的数据位合并 进行新的位填充判定

知识点5【具体波形分析】

  • 标准数据帧,报文ID为0x555,数据长度1字节,数据内容为0xAA

  • 标准数据帧,报文ID为0x666,数据长度2字节,数据内容为0x12, 0x34

  • 扩展数据帧,报文ID为0x0789ABCD,数据长度1字节,数据内容为0x56

  • 标准遥控帧,报文ID为0x088,数据长度1字节,无数据内容

    再次强调:这里不能是0x888,因为11位最高位只能是7 即最大为0x7FF

大家自行分析,就当练习了,大家可以打印出来,或者转成PDF后分析结合电容笔分析。​​​​​​​


http://www.hkcw.cn/article/IUanCyppFm.shtml

相关文章

贾跃亭数度哽咽:散户救了我们的命,FF重生有望

6月3日,一段贾跃亭在首届“FFAI首年度股东日”活动上的讲话视频流出。一位从乐视早期就开始追随贾跃亭投资乐视和FF的股民自费从国内飞到洛杉矶参加活动,表达了对贾跃亭东山再起的期盼。贾跃亭在现场数度哽咽,表示FF能够存活下来主要归功于散户的支持。贾跃亭坦承,FF曾一度…

荣昌端午节旅游总收入近6亿元 文旅消费创新高

在刚刚过去的5月,荣昌区推出了一系列丰富多彩的旅游产品、文化活动和惠民举措,以满足游客多元化的个性化需求,多项数据创下历史新高。据荣昌区文旅委统计,5月1日至31日,全区共接待游客673.98万人次,同比增长224.31%;旅游总收入达377428.8万元,同比增长228.39%。具体来看…

哈佛大学寻求解冻儿童艾滋病研究拨款 法庭斗争持续

6月2日,哈佛大学请求一名联邦法官发布简易判决,以解冻特朗普政府自4月14日以来冻结的25亿美元资金。这些资金与国家安全威胁、癌症和传染病等研究相关。由于拒绝了白宫提出的一系列要求,哈佛大学收到了957份命令,要求冻结这些资金。在提交给法庭的文件中,哈佛大学详细说明…

Ubuntu22.04 安装 CUDA12.8

1.下载CUDA 由于我装完 Ubuntu22.04 后就自动带了最新的显卡驱动,就没有再去配置驱动。 先查看驱动能支持的CUDA最高版本,这里显示可支持到12.8。 nvidia-smi在CUDA的 说明文档 可查看CUDA对应的驱动版本要求。 在 CUDA Toolkit Archive 查找需要的 …

TomSolver 库 | config详解及其测试

一、C 关键特性解析 1. enum class 强类型枚举 enum class LogLevel { OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE, ALL }; enum class NonlinearMethod { NEWTON_RAPHSON, LM };核心特性: 类型安全:禁止隐式转换为整数作用域限定:必须…

2025年—Comfy UI 和 Stable Diffusion底层原理

为什么要先讲SD原理 ? 逻辑理解: ComfyUI是节点式操作,需要自行搭建工作流,理解原理才能灵活定制工作流学习效率: 基础原理不懂会导致后续学习吃力,原理是掌握ComfyUI的关键核心价值: ComfyUI最有价值的功能就是自主搭建工作流&a…

分糖果 两次遍历处理左右

这个题目本来打算两次遍历来写,但是细节处理上出了问题,我想的是距离两个1的距离最大值,但是其实并不是这样的,只有值递增的时候才能递增 题目地址 class Solution:def candy(self, ratings: List[int]) -> int:n len(ratings…

【设计模式-3.6】结构型——桥接模式

说明:本文介绍结构型设计模式之一的桥接模式 定义 桥接模式(Bridge Pattern)又叫作桥梁模式、接口(Interface)模式或柄体(Handle and Body)模式,指将抽象部分与具体实现部分分离&a…

vite构建工具

文章目录 1. 什么是构建工具2. webpack的缺点在哪?3. 区分vite脚手架和vite5. vite预加载5.1 包的加载5.2. vite依赖预构建 7. vite配置文件处理8. vite环境变量和模式8.1 环境变量8.2 模式 1. 什么是构建工具 在开发项目中,我们可能会使用到vue、react…

警方通报“男子拖拽6岁女童进小巷” 嫌疑人已被拘留将追责

6月3日,湖南娄底市公安局娄星分局通报了一起事件。5月20日下午,嫌疑人刘某某酒后行至娄底市娄星区涟滨中街附近,拖拽一名六岁女童进入居民区巷子。幸好被居民及时制止并报警。接警后,民警迅速赶到现场将刘某某控制。经侦查,刘某某涉嫌寻衅滋事已被拘留,将依法追究其刑事责…

下一个假期连休8天要等4个月 国庆中秋合并放

今天是端午节假期的最后一天。很多人关心下一次休假是什么时候。根据国务院办公厅关于2025年部分节假日安排的通知,下一轮节假日将在4个月后的国庆节和中秋节。这两个节日合并放假8天。责任编辑:zx0001

成品油价将迎年内第11次调价 或迎来小幅上涨

成品油价将迎年内第11次调价 或迎来小幅上涨!油价最新消息:2025年6月1日星期日,距离油价调整窗口开启只剩下两天。预计油价将小幅上涨,虽然涨幅不大,但对车主来说能省一点是一点,请相互转告。在本轮计价周期中,开局时油价每吨上涨140元,但由于国际油价下跌的影响,到第…

C. Basketball Exercise

time limit per test 2 seconds memory limit per test 256 megabytes Finally, a basketball court has been opened in SIS, so Demid has decided to hold a basketball exercise session. 2⋅n2⋅n students have come to Demids exercise session, and he lined up th…

【含文档+PPT+源码】基于微信小程序的旅游论坛系统的设计与实现

项目介绍 本课程演示的是一款基于微信小程序的旅游论坛系统的设计与实现,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 …

基于Android的医院陪诊预约系统

博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言&#xff0…

随机性的起源

文章目录 随机性的起源模型权重初始化主要影响常见做法代码示例 数据采集与重排(加载与打乱)例子注意事项代码示例 非确定性算法Dropout带来的随机性代码示例不同运行时的算法卷积操作的实现差异例子解决方法小结 硬件与驱动程序随机性与生成式AI生成式A…

12.1 GUI 事件处理

Swing简介 不同于 AWT 使用重量级组件(每个组件对应有一个本地窗口系统资源),Swing 提供了轻量级组件,它们不是直接映射到本地窗口系统组件上,而是绘制出来的。因此,Swing 组件可以在不同的平台上保持一致的…

冲入起火麦地抢收司机称举手之劳 网友赞救火英雄

冲入起火麦地抢收司机称举手之劳 网友赞救火英雄!6月1日,一段视频在网上引起广泛关注。视频中,远处麦田浓烟滚滚,火焰借风力蔓延。这时,一台收割机朝着浓烟方向驶去,在麦田中快速开辟出一条隔火带。视频中,收割机司机的妻子大声呼喊:“别离火那么近!往外走点!”她还对…

稳定币概念集体大涨 政策利好密集释放

受全球多地稳定币监管政策进展提振,相关概念股近日表现活跃。截至发稿,连连数字(02598.HK)、OSL集团(00863.HK)分别上涨57.88%、3.10%。香港特别行政区政府5月30日在宪报刊登《稳定币条例》,标志着该条例正式生效,进一步完善了香港的数字资产监管框架。此前5月21日,香港立…

从0开始学vue:pnpm怎么安装

一、什么是 pnpm? pnpm(Performant npm)是新一代 JavaScript 包管理器,优势包括: 节省磁盘空间:通过硬链接和符号链接实现高效存储安装速度更快:比 npm/yarn 快 2-3 倍内置工作区支持&#xf…