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

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

相关推荐
酷飞飞11 小时前
库函数版独立按键用位运算方式实现(STC8)
单片机·嵌入式硬件
我怕是好11 小时前
STM32 输入捕获,串口打印,定时器,中断综合运用
stm32·单片机·嵌入式硬件
国科安芯12 小时前
质子试验:守护芯片安全的关键防线
嵌入式硬件·安全·fpga开发·性能优化·硬件架构
zhmc14 小时前
MCU程序的ARM-GCC编译链接
arm开发·单片机·嵌入式硬件
点灯小铭15 小时前
基于STM32单片机的OneNet物联网环境检测系统
stm32·单片机·物联网·毕业设计·课程设计
滴啦嘟啦哒17 小时前
【从0到1制作一块STM32开发板】5. 整体布局
stm32·单片机·嵌入式硬件
普中科技1 天前
【普中STM32精灵开发攻略】--第 11 章 SysTick系统定时器
stm32·单片机·嵌入式硬件·物联网·arm·普中科技
李夕1 天前
掌握工程化固件烧录,开启你的技术进阶之路-FPGA ISE(xilinx)
嵌入式硬件·fpga·固件
Hello_Embed1 天前
STM32HAL 快速入门(二):用 CubeMX 配置点灯程序 —— 从工程生成到 LED 闪烁
笔记·stm32·单片机·学习·嵌入式软件
JasmineX-11 天前
STM32的SPI通信(软件读写W25Q64)
c语言·stm32·单片机·嵌入式硬件