STM32:CAN总线精髓:特性、电路、帧格式与波形分析详解
声明:此博客是我的学习笔记,所看课程是江协科技的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后分析结合电容笔分析。
相关文章:

STM32:CAN总线精髓:特性、电路、帧格式与波形分析详解
声明:此博客是我的学习笔记,所看课程是江协科技的CAN总线课程,知识点都大同小异,我仅进行总结并加上了我自己的理解,所引案例也都是课程中的案例,希望对你的理解有所帮助! 知识点1【CAN总线的概…...

贝叶斯深度学习!华科大《Nat. Commun.》发表BNN重大突破!
华科大提出基于贝叶斯深度学习的超分辨率成像,成功被Nat. Commun.收录。可以说,这是贝叶斯神经网络BNN近期最值得关注的成果之一了。另外还有AAAI 2025上的Bella新框架,计算成本降低了99.7%,也非常值得研读。 显然鉴于BNN“不确定…...

【大模型LLM学习】Flash-Attention的学习记录
【大模型LLM学习】Flash-Attention的学习记录 0. 前言1. flash-attention原理简述2. 从softmax到online softmax2.1 safe-softmax2.2 3-pass safe softmax2.3 Online softmax2.4 Flash-attention2.5 Flash-attention tiling 0. 前言 Flash Attention可以节约模型训练和推理时间…...
三、元器件的选型
前言:我们确立了题目的功能后,就可以开始元器件的选型,元器件的选型关乎到我们后面代码编写的一个难易。 一、主控的选择 主控的选择很大程度上决定我们后续使用的代码编译器,比如ESP32使用的是VScode,或者Arduino&a…...
精益数据分析(95/126):Socialight的定价转型启示——B2B商业模式的价格策略与利润优化
精益数据分析(95/126):Socialight的定价转型启示——B2B商业模式的价格策略与利润优化 在创业过程中,从B2C转向B2B不仅是商业模式的转变,更是定价策略与成本结构的全面重构。今天,我们将通过Socialight的实…...
stm32_DMA
DMA 1. 概念与基本原理 DMA,全称Direct Memory Access,即直接存储器访问。它是微控制器(MCU)、嵌入式处理器中的一个独立硬件模块,用于在无需CPU干预的情况下,在不同内存区域(包括外设寄存器和…...

物联网数据归档之数据存储方案选择分析
在上一篇文章中《物联网数据归档方案选择分析》中凯哥分析了归档设计的两种方案,并对两种方案进行了对比。这篇文章咱们就来分析分析,归档后数据应该存储在哪里?及存储方案对比。 这里就选择常用的mysql及taos数据库来存储归档后的数据吧。 你在处理设备归档表存储方案时对…...
【自动驾驶避障开发】如何让障碍物在 RViz 中‘显形’?呈现感知数据转 Polygon 全流程
【自动驾驶避障开发】如何让障碍物在 RViz 中"显形"?呈现感知数据转 Polygon 全流程 自动驾驶系统中的障碍物可视化是开发调试过程中至关重要的一环。本文将详细介绍如何将自动驾驶感知模块检测到的障碍物数据转换为RViz可显示的Polygon(多边形)形式,实现障碍物…...

【C语言】C语言经典小游戏:贪吃蛇(上)
文章目录 一、游戏背景及其功能二、Win32 API介绍1、Win32 API2、控制台程序3、定位坐标(COORD)4、获得句柄(GetStdHandle)5、获得光标属性(GetConsoleCursorInfo)1)描述光标属性(CO…...
usbutils工具的使用帮助
作为嵌入式系统开发中的常用工具,usbutils 是一套用于管理和调试USB设备的Linux命令行工具集。以下是其核心功能和使用方法的详细说明: 1. 工具组成 核心命令: lsusb:列出所有连接的USB设备及详细信息(默认安装&#…...

vue2中使用jspdf插件实现页面自定义块pdf下载
pdf下载 实现pdf下载的环境安装jspdf插件在项目中使用 实现pdf下载的环境 项目需求案例背景,点击【pdf下载】按钮,弹出pdf下载弹窗,显示需要下载四个模块的下载进度,下载完成后,关闭弹窗即可! 项目使用的是…...

如何防止服务器被用于僵尸网络(Botnet)攻击 ?
防止服务器被用于僵尸网络(Botnet)攻击是关键的网络安全措施之一。僵尸网络是黑客利用大量被感染的计算机、服务器或物联网设备来发起攻击的网络。以下是关于如何防止服务器被用于僵尸网络攻击的技术文章: 防止服务器被用于僵尸网络ÿ…...

基于cornerstone3D的dicom影像浏览器 第二十九章 自定义菜单组件
文章目录 前言一、程序结构1. 菜单数据结构2. XMenu.vue3. XSubMenu.vue4. XSubMenuSlot.vue5. XMenuItem.vue 二、调用流程总结 前言 菜单用于组织程序功能,为用户提供导航。是用户与程序交互非常重要的接口。 开源组件库像Element Plus和Ant Design中都提供了功能…...

【Block总结】DBlock,结合膨胀空间注意模块(Di-SpAM)和频域模块Gated-FFN|即插即用|CVPR2025
论文信息 标题: DarkIR: Robust Low-Light Image Restoration 作者: Daniel Feijoo, Juan C. Benito, Alvaro Garcia, Marcos Conde 论文链接:https://arxiv.org/pdf/2412.13443 GitHub链接:https://github.com/cidautai/DarkIR 创新点 DarkIR提出了…...
【学习笔记】单例类模板
【学习笔记】单例类模板 一、单例类模板 以下为一个通用的单例模式框架,这种设计允许其他类通过继承Singleton模板类来轻松实现单例模式,而无需为每个类重复编写单例实现代码。 // 命名空间(Namespace) 和 模板(Tem…...
字符串加密(华为OD)
题目描述 给你一串未加密的字符串str,通过对字符串的每一个字母进行改变来实现加密,加密方式是在每一个字母str[i]偏移特定数组元素a[i]的量,数组a前三位已经赋值:a[0]=1,a[1]=2,a[2]=4。当i>=3时,数组元素a[i]=a[i-1]+a[i-2]+a[i-3]。例如:原文 abcde 加密后 bdgkr,…...

口罩佩戴检测算法AI智能分析网关V4工厂/工业等多场景守护公共卫生安全
一、引言 在公共卫生安全日益受到重视的当下,口罩佩戴成为预防病毒传播、保障人员健康的重要措施。为了高效、精准地实现对人员口罩佩戴情况的监测,AI智能分析网关V4口罩检测方案应运而生。该方案依托先进的人工智能技术与强大的硬件性能,…...

Double/Debiased Machine Learning
独立同步分布的观测数据 { W i ( Y i , D i , X i ) ∣ i ∈ { 1 , . . . , n } } \{W_i(Y_i,D_i,X_i)| i\in \{1,...,n\}\} {Wi(Yi,Di,Xi)∣i∈{1,...,n}},其中 Y i Y_i Yi表示结果变量, D i D_i Di表示因变量, X i X_i Xi表…...

HarmonyOS Next 弹窗系列教程(4)
HarmonyOS Next 弹窗系列教程(4) 介绍 本章主要介绍和用户点击关联更加密切的菜单控制(Menu) 和 气泡提示(Popup) 它们出现显示弹窗出现的位置都是在用户点击屏幕的位置相关 菜单控制(Menu&…...

【C】-递归
1、递归概念 递归(Recursion)是编程中一种重要的解决问题的方法,其核心思想是函数通过调用自身来解决规模更小的子问题,直到达到最小的、可以直接解决的基准情形(Base Case)。 核心:自己调用…...

飞马LiDAR500雷达数据预处理
0 引言 在使用飞马D2000无人机搭载LiDAR500进行作业完成后,需要对数据进行预处理,方便给内业人员开展点云分类等工作。在开始操作前,先了解一下使用的软硬件及整体流程。 0.1 外业测量设备 无人机:飞马D2000S激光模块ÿ…...
Kerberos面试内容整理-在 Linux/Windows 中的 Kerberos 实践
Windows 实践: 在Windows环境中,Kerberos 几乎是无形融合的。用户使用域账号登录计算机时,实际上就完成了Kerberos的AS认证并获取TGT;此后的资源访问(如共享文件夹、打印机、数据库等)都会自动使用Kerberos进行验证,而无需用户干预。Windows通过LSASS进程维护和缓存用户…...
在 Allegro PCB Editor 中取消(解除或删除)已创建的 **Module** 的操作指南
在 Allegro PCB Editor 中取消(解除或删除)已创建的 Module 有两种主要场景,操作也不同: 📌 场景一:仅想解除元件与 Module 的关联(保留元件位置和布线,但可独立编辑) …...
基于springboot的校园社团信息系统的设计与实现
其他源码获取可以看首页:代码老y 个人简介:专注于毕业设计项目定制开发:springbootvue系统,Java微信小程序,javaSSM系统等技术开发,并提供远程调试部署、代码讲解、文档指导、ppt制作等技术指导。源码获取&…...
nodejs里面的http模块介绍和使用
Node.js的http模块是构建在libuv库之上,以JavaScript接口形式暴露出来的核心模块之一,它允许开发者轻松地创建和管理HTTP服务器及客户端,进而实现网络应用的快速开发。此模块的设计理念围绕着事件驱动和非阻塞I/O模型,这些特性使N…...
mamba架构和transformer区别
Mamba 架构和 Transformer 架构存在多方面的区别,具体如下: 计算复杂度1 Transformer:自注意力机制的计算量会随着上下文长度的增加呈平方级增长,例如上下文增加 32 倍时,计算量可能增长 1000 倍,在处理长序…...

嵌入式鸿蒙开发环境搭建操作方法与实现
Linux环境搭建镜像下载链接: 链接:https://pan.baidu.com/s/1F2f8ED5V1KwLjyYzKVx2yQ 提取码:Leun vscode和Linux系统连接的详细过程1.下载Visual Studio Code...
在 Spring Boot 中使用 WebFilter:实现请求拦截、日志记录、跨域处理等通用逻辑!
💡 前言 在开发 Web 应用时,我们经常需要对所有请求进行统一处理,例如: 记录请求日志实现跨域(CORS)接口权限控制请求参数预处理防止 XSS 攻击 这些功能如果都写在每个 Controller 或 Service 里&#x…...
CSS预处理器:Sass与Less的语法和特性(含实际案例)
Sass(SCSS语法示例) 1. 变量:统一管理颜色 // 定义变量 $primary-color: #1a237e; $success-color: #4caf50; $font-size-base: 16px;// 实际应用 body {color: $primary-color;font-size: $font-size-base; }.button {background: $succes…...

QT常用控件(1)
控件是构成QT的基础元素,例如Qwidget也是一个控件,提供了一个‘空’的矩形,我们可以往里面添加内容和处理用户输入,例如:按钮(QpushButton),基础显示控件(Lableÿ…...