当前位置: 首页 > news >正文

STM32 CAN简介及帧格式

一、CAN简介

                                                            图1.CAN简介 

高速CAN:用于短距离、高速

低速CAN: 用于长距离、低速

 二、回顾之前的通信协议对比:

                                                             图2. 通信协议对比

UART:点对点的通信,只有两个设备

I2C:一个主机外挂多个被动的传感器、存储器等模块

SPI:也是一主多从,但是通信速率是最快的,主要应用于高速通信场景

CAN:可以实现多个主控互相通信

三、CAN硬件电路

  • 每个设备通过CAN收发器挂载在CAN总线网络上
  • CAN控制器引出的TX和RX与CAN收发器相连,CAN收发器引出的CANH和CAN L分别与总线的CAN H和CANL相连
  • 高速CAN使用闭环网络,CANH和CANL两端添加120Q的终端电阻
  • 低速CAN使用开环网络,CAN H和CANL其中一端添加2.2kQ的终端电阻

                                                            图3.闭环高速CAN 

         

                                                   图4.开环低速CAN 

注:闭环控制CAN总线的两端120欧电阻作用:

1.防止回波反射(与传输线原理有关)

2.可以将两根差分线的电压“收紧”,,也就是电压拉至同一电压,呈现1状态。当需要0状态的时候由软件来将电压拉开,呈现0状态。(如下)

CAN收发器-TJA1050

                                                          图5.TJA1050原理图 

  • 发送部分: 

首先最右边的CANH和CANL就是CAN总线,连接在总线上。

中间的RECEIVER可以时刻检测总线的电压差,然后输出到左边通过场效应管到RXD引脚(这个场效应管有电平反向的功能,右边为1,输出左边为0。右边为0,输出到左边为1)。

  • 接收部分:

如果TXD给1,则不会对总线进行任何操作,总线呈现默认的隐性电平1。

如果TXD悬空,则默认也是给1

如果TXD给0,则驱动器会把CANH拉高,CANL拉低,输出显性电平0。

如果TXD一直给0,出错了,则显性超时,收发器会主动释放CAN总线。

四、CAN电平标准

                                                               图6.CAN电平标准

这里注意:逻辑1隐性电平逻辑0显性电平

高速CAN规定的状态0或者是状态1,都是由电压差来呈现的。逻辑电平是由两个线的差分电平合成而来的

五、CAN总线帧格式

规定了一下五种帧格式:

                                                             图7.CAN帧类型

主要学习的是数据帧,最复杂,用到的最多

(一)数据帧

                                                         图8,数据帧的构成 

  • 一个起始帧,是一个显性信号,用来标志起始信号
  • identifier(ID):报文ID,标准格式是11位。用来表示后面数据的功能,相 当于加一个名字,同时还用来区分优先级,ID小的报文优先发送,ID大的等到下一次的空闲时间重新发送,不同功能的数据帧ID不同
  • RTR:占据1位必须为显性0,远程请求标志位,用于区分数据帧还是遥控帧。数据帧为0,遥控帧为1
  • IDE:ID扩展标志位,用于区分标准格式还是扩展格式,标准格式固定为显性0(如上半部分),扩展格式固定为隐性1(如下班部分) 
  • r0 : 保留位,必须为显性0,为了以后附加其它功能的
  • DLC : 数据段的长度,例如发一个字节,DLC就给0001,八个字节,就给1000
  • Data : 数据段,最大64位,也就是8个字节(这里数据段必须要给8的倍数
  • CRC段 : 高效检验算法,有15位,对前面所有的数据进行算法计算,从SOF到Data,计算得到一个校验码,然后接收方也是通过CRC进行CRC计算,得到校验码。然后对比发送方的校验码,判断传输是否有误
  • CRC界定符 : 1位,必须是隐性电平
  • ACK槽:应答的作用,发送方发出一帧数据,查看是否收到,发送方发送隐性1,如果接收方存在,则接收方就要发显性0,可以多个设备同时接收(也就是同时拉开)
  • EOF:7个隐性1,作为停止位。

扩展格式:

  • ID:同上
  • SRR:没有用,但是要给隐性电平1
  • IDE:扩展格式标志位,和标准格式相反
  • 之后就和标准格式相同

(二)遥控帧

适合使用频率低,但偶尔又需要集中用几次的数据

                                                             图9.遥控帧的构成

RTR进行数据帧和遥控帧的区分,数据帧为0,遥控帧为1。

请求方发出遥控帧,其中ID表示要请求的数据。响应请求的那边,通过相同ID的数据帧反馈数据。

注:当请求和反馈数据同时发生时,数据帧拥有更高的优先级

(三)错误帧

用途:某个设备检测出错误时,向其它设备通知错误

                                                          图10.错误帧的构成

(四)过载帧

                                                             图11.过载帧的构成 

(五)帧间隔

连续发送数据帧时,中间会有一小段帧间隔

                                                             图12.帧间隔  

六、位填充

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

                即将发送:    10000011 0       10000011110    0111111111110          

                实际发送:    1000001110       1000001111100    011111011111010          

                实际接收:    1000001110       1000001111100    011111011111010          

                移除填充后: 100000110       10000011110    0111111111110

  • 位填充作用:

        1. 增加波形的定时信息,利于接收方执行“再同步”,防止波形长时间无变化,导致接收方不能精确掌握数据采样时机

         2.将正常数据流与“错误帧”和“过载帧”区分开,标志“错误帧”和“过载帧”的特异性(它们都需要6个相同电平

         3.保持CAN总线在发送正常数据流时的活跃状态,防止被误认为总线空闲(规定:出现连续11个隐性1之后,认为是总线空闲)

总结:某个设备想要发送自己的数据时,就操作总线,拉开或者释放,使总线产生一段这样的时序波形,发送方需要依照上面的帧格式的定义来发,接收方同样根据帧格式的定义,来接收解析

http://www.lqws.cn/news/462511.html

相关文章:

  • 操作系统内核态和用户态--1-基础认识
  • [Github]GitHub 2FA快速安全配置全攻略
  • 解决SQL映射文件的警告提示
  • Vue 3 + Axios 完整入门实战指南
  • Docker学习笔记:DockerFile
  • XCVU47P-2FSVH2892E Xilinx Virtex UltraScale+ FPGA AMD
  • 解锁K-近邻算法:数据挖掘的秘密武器
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 04(题目+回答)
  • Python 数据分析与可视化 Day 3 - Pandas 数据筛选与排序操作
  • 当数据自己会说话:聚类与分类算法全景解析
  • 大模型在急性弥漫性腹膜炎预测及治疗方案制定中的应用研究
  • springboot口腔管理平台
  • CSS 动画:深入解析与高效实践
  • cursor中定义cursor rules
  • 【入门】【例18.2】 孔融让梨
  • 华为云Flexus+DeepSeek征文 | 基于Flexus X实例的金融AI Agent开发:智能风控与交易决策系统
  • 《Effective Python》第九章 并发与并行——使用 concurrent.futures 实现真正的并行化
  • shell脚本--条件
  • 互联网大厂Java求职面试:AI与大模型技术下的RAG系统架构设计与性能优化
  • 天若 OCR效率工具F4 截图秒识别,多语言混合文本准确率高离线识别保隐私
  • SpringBoot电脑商城项目--显示购物车列表
  • 基于ARM ubuntu如何进行交叉编译
  • RA4M2开发IOT(0)----安装e² studio
  • 【 CVPR2025】计算机视觉|CEM : 模型逆向工程?条件熵最大化来啦!
  • 【设计模式】4.代理模式
  • 如何优化HarmonyOS 5的分布式通信性能?
  • 专业APP定制开发方案详解
  • 【网络产品经营】园区网络
  • Qt Library库系列----Serial串口
  • vue3+arcgisAPI4案例:智慧林业资源监测分析平台(附源码下载)