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

news2025/7/27 11:43:36

看过我之前的文章就知道,正点原子下的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的供电!
TX与RX与MCU相连(也就是CAN控制器),CANH与CANL与CAN总线相连!
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后面,SRR这里是没有用的,所以给隐形电平1,;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.coloradmin.cn/o/2399474.html

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

相关文章

2025年想冲网安方向,该考华为安全HCIE还是CISSP?

打算2025年往网络安全方向转,现在考证是不是来得及?考啥证? 说实话,网络安全这几年热得发烫,但热归热,入门门槛也不低,想进这个赛道,技术、项目经验、证书,缺一不可。 …

153页PPT麦肯锡咨询流程管理及企业五年发展布局构想与路径规划

麦肯锡咨询的流程管理以其高度结构化、数据驱动和结果导向的核心特点著称,旨在为客户提供清晰、可行且价值最大化的解决方案。其典型流程可概括为以下几个关键阶段:下载资料请查看文章中图片右下角信息 问题界定与结构化: 这是流程的基石。麦…

[特殊字符] 革命性AI提示词优化平台正式开源!

AI时代最强大的Prompt工程师已经到来! 你是否还在为写不出高质量提示词而头疼?是否羡慕那些能够驾驭AI、让ChatGPT、Claude乖乖听话的"提示词大师"?今天,我们为你带来一个颠覆性的解决方案——TokenAI Auto-Prompt&…

我的概要设计模板(以图书管理系统为例)

一、总述 1.1 需求或目标 随着数字化阅读普及,传统图书馆管理方式效率低下、资源检索不便。为提升图书管理效率,方便读者借阅与查询,公司计划开发 “在线图书管理系统”,实现图书的电子化管理、快速检索、在线借阅等功能&#x…

DrissionPage爬虫包实战分享

一、爬虫 1.1 爬虫解释 爬虫简单的说就是模拟人的浏览器行为,简单的爬虫是request请求网页信息,然后对html数据进行解析得到自己需要的数据信息保存在本地。 1.2 爬虫的思路 # 1.发送请求 # 2.获取数据 # 3.解析数据 # 4.保存数据 1.3 爬虫工具 Dris…

iptables实战案例

目录 一、实验拓扑 二、网络规划 三、实验要求 四、环境准备 1.firewall (1)配置防火墙各大网卡IP并禁用 firewall和selinux (2)打开firewall路由转发 2.PC1(内网) (1)配置防…

Google AI 模式下的SEO革命:生成式搜索优化(GEO)与未来营销策略

一、搜索范式转变:从链接引导到答案交付 Google自2023年起逐步推出AI搜索功能,经历了SGE(Search Generative Experience)和Gemini阶段,最终在2025年全面上线了「AI Mode」搜索模式。与此同时,也保留了一种过…

SpringBoot中缓存@Cacheable出错

SpringBoot中使用Cacheable: 错误代码&#xff1a; Cacheable(value "FrontAdvertiseVOList", keyGenerator "cacheKey") Override public List<FrontAdvertiseVO> getFrontAdvertiseVOList(Integer count) {return this.list(Wrappers.<Adve…

iOS UIActivityViewController 组头处理

0x00 情形一 - (void)shareAction1 {// 当前 View 转成图片UIImage *image [self snapshotImage:self.view];NSArray *activityItems [image];UIActivityViewController *activityVC [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationAc…

《TCP/IP 详解 卷1:协议》第3章:链路层

以太网和IEEE802局域网/城域网标准 IEEE802局域网/城域网标准 IEEE 802 是一组由 IEEE&#xff08;电气与电子工程师协会&#xff09;定义的局域网和城域网通信标准系列&#xff0c;涵盖了从物理层到链路层的多个网络技术。其中&#xff1a; IEEE 802.3 定义的是传统的以太网…

Elasticsearch从安装到实战、kibana安装以及自定义IK分词器/集成整合SpringBoot详细的教程(二)

package com.test.xulk.es.entity.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.test.xulk.es.entity.Hotel;public interface HotelMapper extends BaseMapper<Hotel> { }集成Springboot 项目里面 官方地址&#xff1a; Elasticsearch …

数据库管理-第333期 Oracle 23ai:RAC打补丁完全不用停机(20250604)

数据库管理333期 2025-06-04 数据库管理-第333期 Oracle 23ai&#xff1a;RAC打补丁完全不用停机&#xff08;20250604&#xff09;1 概念2 要求3 操作流程4 转移失败处理总结 数据库管理-第333期 Oracle 23ai&#xff1a;RAC打补丁完全不用停机&#xff08;20250604&#xff0…

【DAY39】图像数据与显存

内容来自浙大疏锦行python打卡训练营 浙大疏锦行 知识点&#xff1a; 图像数据的格式&#xff1a;灰度和彩色数据模型的定义显存占用的4种地方 模型参数梯度参数优化器参数数据批量所占显存神经元输出中间状态 batchisize和训练的关系 作业&#xff1a;今日代码较少&#xff0…

AI代码库问答引擎Folda-Scan

简介 什么是 Folda-Scan &#xff1f; Folda-Scan 是一款革命性的智能项目问答工具&#xff0c; 完全在浏览器中本地运行 。它使用高级语义矢量化将您的代码库转变为对话伙伴&#xff0c;使代码理解和 AI 协作变得前所未有的简单和安全。其采用尖端的 Web 技术和 AI 算法构建&…

Kafka深度技术解析:架构、原理与最佳实践

一、 消息队列的本质价值与核心特性 1.1 分布式系统的“解耦器” 异步通信模型 代码列表 graph LRA[生产者] -->|异步推送| B[(消息队列)]B -->|按需拉取| C[消费者1]B -->|按需拉取| D[消费者2] 生产者发送后立即返回&#xff0c;消费者以自己的节奏处理消息。典…

基于cnn的通用图像分类项目

背景 项目上需要做一个图像分类的工程。本人希望这么一个工程可以帮助学习ai的新同学快速把代码跑起来&#xff0c;快速将自己的数据集投入到实战中&#xff01; 代码仓库地址&#xff1a;imageClassifier: 图片分类器 数据处理 自己准备的分类图像&#xff0c;按照文件夹分…

Linux环境管道通信介绍

目录 前言 一、通信的本质 二、匿名管道 1.通信资源——文件缓冲区 2.为什么叫匿名管道&#xff1f; ​编辑 3.匿名管道的创建过程 4.pipe函数 小结 5.一些问题 1&#xff09;匿名管道为什么要求父子进程将原本的读/写权限只保留一个 2&#xff09;为什么一开始父进程要以读/写…

DIC技术助力金属管材全场应变测量:高效解决方案

在石油管道、汽车排气系统、航空航天液压管路等工业场景中&#xff0c;金属管作为关键承力部件&#xff0c;其拉伸性能&#xff08;如弹性极限、颈缩行为、断裂韧性&#xff09;直接影响结构安全性和使用寿命。 实际应用中&#xff0c;选用合适的管材非常重要&#xff0c;通过…

嵌入式学习--江协stm32day1

失踪人口回归了&#xff0c;stm32的学习比起51要慢一些&#xff0c;因为涉及插线&#xff0c;可能存在漏插&#xff0c;不牢固等问题。 相对于51直接对寄存器的设置&#xff0c;stm32因为是32位修改起来比较麻烦&#xff0c;江协课程是基于标准库的&#xff0c;是对封装函数进…

湖北理元理律师事务所:债务化解中的心理重建与法律护航

专业法律顾问视角 一、债务危机的双重属性&#xff1a;法律问题与心理困境 在对173名债务人的调研中发现&#xff1a; 68%存在焦虑引发的决策障碍&#xff08;如不敢接听银行电话&#xff09; 42%因羞耻感隐瞒债务导致雪球效应 湖北理元理律师事务所创新采用法律-心理双轨…