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之后,认为是总线空闲)

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

相关推荐
cjy_Somnr3 小时前
keil5报错显示stm32的SWDIO未连接不能烧录
stm32·单片机·嵌入式硬件
Lay_鑫辰4 小时前
西门子诊断-状态和错误位(“轴”工艺对象 V1...3)
服务器·网络·单片机·嵌入式硬件·自动化
无垠的广袤6 小时前
【工业树莓派 CM0 NANO 单板计算机】本地部署 EMQX
linux·python·嵌入式硬件·物联网·树莓派·emqx·工业物联网
雲烟8 小时前
嵌入式设备EMC安规检测参考
网络·单片机·嵌入式硬件
泽虞8 小时前
《STM32单片机开发》p7
笔记·stm32·单片机·嵌入式硬件
田甲8 小时前
【STM32】 数码管驱动
stm32·单片机·嵌入式硬件
up向上up9 小时前
基于51单片机垃圾箱自动分类加料机快递物流分拣器系统设计
单片机·嵌入式硬件·51单片机
纳祥科技18 小时前
Switch快充方案,内置GaN,集成了多个独立芯片
单片机
单片机日志19 小时前
【单片机毕业设计】【mcugc-mcu826】基于单片机的智能风扇系统设计
stm32·单片机·嵌入式硬件·毕业设计·智能家居·课程设计·电子信息
松涛和鸣20 小时前
从零开始理解 C 语言函数指针与回调机制
linux·c语言·开发语言·嵌入式硬件·排序算法