34.1STM32下的can总线实现知识(区分linux)_csdn - 详解

news/2025/10/7 10:12:39/文章来源:https://www.cnblogs.com/lxjshuju/p/19128236

看过我之前的文章就知道,正点原子下的linux中CAN总线并没有讲的很明白,都是架构自带的!
这里我找到江科大学长的can总线的讲解视频!
CAN总线入门教程-全面细致 面包板教学 多机通信_哔哩哔哩_bilibili
在这里我也会一步一步讲解CAN总线的协议编写流程!

1、can 简介

Pasted image 20250518181418.png
我们以STM32F103C8T6为例实现基本的驱动!
Pasted image 20250518194200.png
下面的主流通信协议在之前的文章中也讲过!
Pasted image 20250518194636.png

1.1、can硬件电路

通过can总线能够看作是串口UART和I2C通信的结合体,不过尤为重要的是,can通信的TX和RX不需交叉相连!
Pasted image 20250519091008.png
其中右边的电路的2.2k欧的电阻是悬空的!

1.2、can的电平标准

可以看到逻辑电平和差分电平!
按直觉来说,1是显性电平和0是隐形电平。
但是差分信号是相反的,1是隐形电平,0是显性电平!
Pasted image 20250519092217.png
为了观察现象方便和学习CAN总线协议,我们后面用逻辑电平来理解!

1,3、can收发器-TJA1050(高速can)

Pasted image 20250519103339.png
看到上面这个图片,一共有8个引脚。VCC得5V的供电!
CAN控制器),CANH与CANL与CAN总线相连!就是TX与RX与MCU相连(也就
Vref是参考电压输出!可以不用连接!
S:选择高速模式还是静默模式。
Pasted image 20250519135325.png
可以分析一下这个电路!
当CANH与CANL有电压差的时候,此时是显性电平0,就会在RECEIVER的地方输出1;当CANH与CANL没有电压差的时候,此时是隐性电平1,就会在RECEIVER的地方输出0;
输出的0和1,就会通过左边的场效应管来驱动到RXD引脚,场效应管允许当做电子开关,当RECEIVER输出为1时,也就是上管断开,下管导通,会使GND导通,即输出0;当RECEIVER输出为0时,也就是上管导通,下管断开,会使VCC导通,即输出1;
我们再来分析一下TXD的作用!
当TXD为1时,会使得上下两个场效应管断开!
Pasted image 20250519140436.png
相当于不对CAN总线有任何的操作!即保持0电压差!在收紧状态下,呈现隐形电平1。
当TXD给0时,上下两个场效应管都导通!
Pasted image 20250519141136.png
可能看作上面的场效应管把CANH拉高!下面的场效应管把CANL拉低!这个时候就有电压差了!就是显性电平0。
通过这样大家就可能总结;当发送的时候,TXD发1,隐形电平1,TXD发0,显性电平0;当接收的时候,若为隐形电平1,则RXD为1,若为显性电平0,则RXD为0。这样我们就能够按照这个逻辑实现CAN总线的多主机通信协议!
如果TXD悬空了!则上拉的VCC电源会保持默认输入1的状态,旁边还有TXD显性超时计时器TXD输入管理异常,始终输入显性电平0,则CAN总线始终保持有电压差的状态,则这样会导致CAN总线瘫痪,并且没有设备可以阻止这一个现象!那么就是,作用是。要TXD显性超时计时器就是当发生上面所讲的情况,就会等一段时间后,收发器会自动释放CAN总线,使得为隐形电平1,防止CAN总线瘫痪!
接下来我们分析S引脚!
Pasted image 20250519144253.png
S引脚下面有个下拉的GND,假如S引脚悬空,则默认输入为低电平!
旁边的是温度保护,如果温度异常,就会控制驱动器,切断输出,以免干扰CAN总线!

1.4、CAN物理特性

Pasted image 20250519150257.png

2、帧格式

Pasted image 20250519152020.png

2.1、数据帧格式

Pasted image 20250519153542.png
D/R:这段时序根据你要发送的数据的不同,可以选择发D(显性0)和选择发R(隐形1);
R:表示发隐形1;
D:表示发显性0;
白色是发隐形电平1,灰色是发显性电平0。
应答位特有的。就是白色和灰色各占一半在应答位的时候,发送方必须发隐形电平1,接收方必须发显性0。这个的意思就是发送方释放总线和接收方拉开总线!
图上的数字表示该时序所占的位数!
Pasted image 20250519172251.png
帧起始:允许看到是帧开始位灰色从显性电平0,也就是逻辑0开始的,有电压差,表示要开始发送了。
仲裁段:仲裁段是11位报文ID,报文ID还区分优先级,当多个设备进行管理时,一般会根据ID的大小来判断优先级!RTR占一位,在数据帧里必须是显性电平0,RTR的意思是远程请求标志位。报文ID+RTR就是仲裁段,仲裁主要靠报文ID,RTR是用于相同ID的数据帧和遥控帧,数据帧的优先级大于遥控帧,素材帧和遥控帧的报文ID是可以相同的,他这里和I2C的特别相似,7位从机地址+1位读写位,那么这里数据帧的RTR就是写入,遥控帧的RTR就是读取。上面的图片的RTR是灰色的隐形电平0那就是数据帧的标识!区分遥控帧1
控制段:首先是
IDE,是ID扩展标志位
通过,用于区分标准格式还是扩展格式,标准格式为显性电平0,扩展格式为隐形电平1,能够看到图片中有标准格式和扩展格式的区分!其次为r0, 必须为显性0看,r0是保留位,保留位是以后用的着,DLC是数据段长度,比如看图片DLC的位数为4,必须为4,因为CAN总线的发送一帧数据为1~8个字节,一个字节是8位2进制数据,最多是8*8假设DLC为0001,则发送一个字节;若DLC为1000,则信息段是发送8个字节,也就是64个2进制内容。所以能够看到图片当中是0到64。
数据段:这里是0~64位。数据段要给8的倍数,具体给多少要看DLC的配置。
CRC段:这里有15位,CRC是一种高效的校验的算法否传输有错误!就是,他会对前面所有的数据位进行验算。计算得到的校验码,附在这后面。接收方得到数据和校验码之后,也会进行CRC校验看看计算的校验码是否一致,以判断传输
CRC界定符:1位,必须为隐形电平1。
ACK段ACK槽和ACK界定符,都是1位,ACK槽的作用就是应答,发送方发出一帧材料,到底有没有设备收到。当发送方在应答位,也就是ACK槽处,会释放CAN总线,隐形电平,如果接收方接收到了数据,接收方就会在这个ACK槽进行应答,也就是显性电平0,拉开总线。发送方释放总线后,会在ACK槽读取总线状态。ACK界定符和CPC界定符一起辅助ACK槽构成应答协议,适合这种特有的通信协议。这里有两个注意事项第一个,可以允许多个接收方共同拉开总线,因为一个报文消息,可以被多个设备同时接收,多个设备能够在这里同时拉开。第二个:并不是发送方把一段波形完整的发出去,然后再接收方应答的。而是,发送方和接收方共同完成一整个波形。发送方每发出一位,接收方就立刻收到这一位了,所以在这条时序的最后,整个数据帧还没有结束,接收方其实已经收完了。所以当在CRC界定符+发送隐形电平+ACK界定符中间就许可让接收方应答了,因为发送方在CRC界定符+发送隐形电平+ACK界定符全是隐形电平。
可以看到下面这幅图片!
Pasted image 20250519214937.png
接收方拉开的。就是可以看到绿色的就
也就是说应答是夹在发送过程当中的!
帧结束:应答之后,发送方会发7个隐形电平1,作为EOF,整个信息帧结束。
Pasted image 20250519215506.png
扩展格式:源于标准格式的11位ID不够用了,需要加一些,扩展格式也要考虑标准格式的兼容;首先,11位ID仍然保持不变,后面再加18位ID;SRR:代替RTR的位,扩展格式的RTR已经放在后面了,RTR必须放在ID后面,给隐形电平1就是SRR这里是没有用的,于,;IDE:用于区分标准格式还是扩展格式,标准格式为显性电平0,扩展格式为隐形电平1;后面就是RTR了,之后的就跟标准格式差不多了!这样就是实现了扩展ID。

2.2、数据帧各部分用途简介

Pasted image 20250519220705.png

2.3、信息帧的发展历史

Pasted image 20250519221512.png

2.4、遥控帧格式

可以明显看出遥控帧和数据帧的区别!
遥控帧的RTR是1,数据帧的RTR是0,而且遥控帧没有数据段!
Pasted image 20250526110011.png
若是有设备需要的话,首先接收方会发出一个遥控帧,遥控帧会包含报文ID,遥控帧也是广播式的,每个设备都能收到遥控帧,如果其中有个设备有这个ID的数据,那么这个设备就会把数据帧依据广播出来,之后真正需要的接收方就会收到数据。(适合使用频率低的数据传输)
!:若是启用频率高,这种遥控帧请求式就不合适了!
因为请求式产生的遥控帧本身也在占用总线资源,所以使用高频率的数据的时候,还是直接用广播式的方法传输数据帧。

一次完整的数据传输:
需要遥控帧和材料帧配合!

2.5、错误帧

Pasted image 20250526111440.png
错误分为主动错误和被动错误。
设备默认为主动错误。
处于主动错误状态的设备,检测出错误的时候,会连续发6个显性位。这样必然会造成破坏正常素材的传输,其他设备检测到错误标志时,就会抛弃该数据,主动错误产生太频繁了,说明这个设备不可靠,设备就会处于被动错误的状态!
==处于被动错误的状态的设备,==检测出错误的时候,会连续发6个隐形位,发6个1,也就是不去碰总线,就不会破坏总线别人发的数据,但是会破坏自己的数据。
0~6是0到6位的延长时间,一个设备发出的错误标志,可能会引发其他设备连带产生的错误标志,
多个设备叠加起来的错误标志不止6位,因此加了0~6,

2.6、过载帧

Pasted image 20250526144350.png

2.7、帧间隔

下图这个分为主动错误状态和被动错误状态!
Pasted image 20250526144551.png

2.8、位填充

Pasted image 20250526144819.png

2.9、分析波形实例

Pasted image 20250526145905.png
可以看到标准数据帧的4位DLC是00101,本应该是0001的,但是要位填充补了1。
CRC的内容有CAN收发器自动生成,不用我们管!
会自动剔除填充位。只关心真正的数据。就是CRC校验时,不需要填充位,于
Pasted image 20250529154428.png

3、接收方数据采样

Pasted image 20250530164817.png

3.1、接收方数据采样遇到的难题

Pasted image 20250530165135.png

3.2、位时序

Pasted image 20250530174252.png

3.3、硬同步

Pasted image 20250530180900.png

3.4、再同步

Pasted image 20250530172817.png

3.5、波特率计算

Pasted image 20250530182125.png

4、仲裁

Pasted image 20250530182451.png

4.1、先占先得

Pasted image 20250530182952.png

4.2、非破坏性仲裁

Pasted image 20250530182809.png

4.3、非破坏性仲裁过程

Pasted image 20250530184149.png

4.4、材料帧和遥控帧的优先级

Pasted image 20250530205633.png

4.5、标准格式和扩展格式的优先级

Pasted image 20250530211409.png

5、错误处理

Pasted image 20250601135826.png

5.1、错误帧

Pasted image 20250601152536.png

5.2、错误状态

Pasted image 20250601154137.png

5.3、错误计数器

Pasted image 20250604093921.png

5.4、主动错误帧和被动错误帧波形实例

Pasted image 20250604094521.png
Pasted image 20250604095013.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930293.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js实现promise常用场景使用示例

下面为你介绍 JavaScript 中 Promise 的几个些常用场景及实现示例,这些场景在实际开发中经常会遇到。 1. 异步请求处理 Promise 最常见的用途之一是处理异步请求,比如使用 fetch API 调用后端接口: // 发起 GET 请求…

企业加强网站建设的必要性天津网站优化公司推荐哪家

说明:本系列是七月算法深度学习课程的学习笔记 文章目录1神经网络与卷积神经网络1.1 深度神经网络适合计算机视觉处理吗1.2CNN的结构1.2.1 数据输入层1.2.2 卷积层1.2.3 激励层1.2.3 池化层1.2.4 全连接层1.3CNN的训练算法1.4CNN的优缺点2正则化与Droupout3典型结构…

spatial for parallel compute 使用简介

spatial for parallel compute 使用简介spatial 能干嘛 spatial 可以很方便地设计并行计算电路,内置了 并行计算语法和流水线语法支持。 下载与编译 官方下载地址是 https://github.com/stanford-ppl/spatial 国内的备…

网站icp备案信息成都旅游的网站建设

一、简介 本文介绍基于 buildroot 文件系统的 QT 模块的使用方法: • 如何在 buildroot 工具里编译 QT 动态库; • 编译及运行 qt_demo 应用程序; • 适配过程遇到的问题。 二、QT动态库编译 在项目根路径执行 ./build.sh buildroot_menuc…

Mermaid 绘图--以企业权限视图为例 - 详解

Mermaid 绘图--以企业权限视图为例 - 详解2025-10-07 10:06 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bloc…

英语_阅读_Balancing Benefits and Risks_待读

Digital Life: Balancing Benefits and Risks Digital life has become a huge part of how we learn, play and connect, 数字生活已经成为我们学习、娱乐和社交的重要组成部分, From AI tutors that support school…

网站模版asp北京建网站公司

文章目录 零. RpcService服务概述1. AkkaRpcService的创建和初始化2.通过AkkaRpcService初始化RpcServer3. ResourceManager中RPC服务的启动4. 实现相互通讯能力 零. RpcService服务概述 RpcService负责创建和启动Flink集群环境中RpcEndpoint组件的RpcServer,且Rpc…

手机网站判断跳转淄博周村学校网站建设报价

前言 本文由于介绍Android多线程编程的学习。 线程基本用法 定义线程有两种方式,分别是继承Thread类、实现Runnable接口: 继承Thread类:只需新建一个类继承自Thread,然后重写父类的run()方法,在这个方法里面写耗时…

为什么有些网站看不到百度快照南宁网站制作哪家好

对于做互联网的朋友们来说,引流是一个必不可少的环节。 掌握一种优秀的引流方法至关重要,这也可以视为我们的生计之源。 今天,我将向大家介绍一款全自动的引流工具——抖音全自动引流脚本软件。 这款软件的效果非常显著,它可以替…

怎么做新网站才能被百度收录有哪些官网做得比较好

版本与信息查询 docker --version:查看安装的Docker版本。 docker info:获取Docker系统的详细配置信息。 镜像管理 docker images:列出本地所有镜像。 docker search IMAGE_NAME:搜索Docker Hub上的镜像。 docker pull IMAGE_NAME[:TAG]:从仓库下载指定镜像。 docker rmi …

企业网站维护的要求包括前端自我介绍面试技巧

Python的正则表达式使用 定义使用场景查替换分割 常用的正则表达符号查原字符英文状态的句号点 .反斜杠 \英文的[]英文的()英文的?加号 星号 *英文状态的大括号 {} 案例 定义 正则表达式是指专门用于描述或刻画字符串内在规律的表达式。 使用场景 无法通过切片,…

大模型部署

部署云服务部署 优势:前期成本低,维护简单 劣势:数据不安全,长期使用成本高本地机器部署 优势:数据安全,长期成本低 劣势:初期成本高,维护困难他人部署 1.阿里云白炼 2.百度智能云 3.硅基流动 4.火山引擎OLLAM…

读技术之外:社会联结中的人工智能02劳工

读技术之外:社会联结中的人工智能02劳工1. 劳工 1.1. 入口通道处每隔一定距离都会出现很多考勤钟标志 1.2. 休息间里的考勤钟也起着重要作用—进出房间的所有扫描都会被追踪 1.3. 每个班次间只能休息15分钟,还有无薪…

详细介绍:如何有效删除 iPhone 上的所有内容?

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

鼠标图标更改样式

https://zhutix.com/tag/cursors/page/2/?post_order=likeI hope all of us can learn to progress!

做网站的预算表广西桂林天气预报15天查询

一、SpringBoot和SpringCloud简介 1、SpringBoot:是一个快速开发框架,通过用MAVEN依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动SpringMVC),简化XML配置&am…

徐州网站建设价格odoo做网站

目录 Vue.js Ajax(axios) GET 方法 请求方法的别名 并发 请求配置项 响应结

马洪旭 做的网站大学赞友商城电商平台排名第几

以前都是用Cg的,现在改用GLSL,又要重新学,不过两种语言很多都是相通的。下面的例子是实现绘制一个三角形的简单程序。采用了VBO(veretx buffer object)、VAO(vertex array object)等OpenGL的一些…

网站开发速成培训机构郑州网站设计制作价格

1、正向代理 1.我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站 2.于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。 3.客户端必须设置正向代理…

webpack和vite的区别 - 指南

webpack和vite的区别 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…