can通讯学习笔记

CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需要,1986 年德国电气商博世公司开发出面向汽车的 CAN 通信协议。此后,CAN 通过 ISO11898 及 ISO11519 进行了标准化,现在在欧洲已是汽车网络的标准协议。
CAN协议特点:
1.多主控制。在总线空闲时,所有单元都可以发送消息(多主控制),而两个以上的单元
同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。
2.系统的柔软性。与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。
3. 通信速度较快,通信距离远。最高1Mbps(距离小于 40M),最远可达10KM(速率低于 5Kbps)。
4. 具有错误检测、错误通知和错误恢复功能。所有单元都可以检测错误(错误检测功能),检测出错误的单元会立即同时通知其他所有单元(错误通知功能),正在发送消息的单元一旦检测出错误,会强制结束当前的发送。
5. 故障封闭功能。CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)
还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。
6.连接节点多。CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没
有限制的。
can通讯学习笔记
数据帧遥控帧有标准格式和扩展格式两种格式。标准格式有 11 个位的标识符(ID),扩展格式有 29 个位的 ID
can通讯学习笔记
数据帧一般由 7 个段构成,即:
(1) 帧起始。表示数据帧开始的段。
(2) 仲裁段。表示该帧优先级的段。
(3) 控制段。表示数据的字节数及保留位的段。
(4) 数据段。数据的内容,一帧可发送 0~8 个字节的数据。
(5) CRC 段。检查帧的传输错误的段。
(6) ACK 段。表示确认正常接收的段。
(7) 帧结束。表示数据帧结束的段。
can通讯学习笔记
can通讯学习笔记
can通讯学习笔记
can通讯学习笔记
can通讯学习笔记
can通讯学习笔记
D 表示显性电平,R 表示隐形电平
can通讯学习笔记
can通讯学习笔记

can通讯学习笔记
can通讯学习笔记
can通讯学习笔记
can通讯学习笔记
can通讯学习笔记
can通讯学习笔记
can通讯学习笔记
CAN 接收流程
CAN 接收到的有效报文,被存储在 3 级邮箱深度的 FIFO 中。FIFO 完全由硬件来管理,从而节省了 CPU 的处理负荷,简化了软件并保证了数据的一致性。应用程序只能通过读取 FIFO输出邮箱,来读取 FIFO 中最先收到的报文。这里的有效报文是指那些正确被接收的(直到 EOF都没有错误)且通过了标识符过滤的报文。前面我们知道 CAN 的接收有 2 个 FIFO,我们每个滤波器组都可以设置其关联的 FIFO,通过 CAN_FFA1R 的设置,可以将滤波器组关联到FIFO0/FIFO1
CAN 接收流程为:FIFO 空➡收到有效报文➡挂号_1(存入 FIFO 的一个邮箱,这个由硬件
控制,我们不需要理会)➡收到有效报文➡挂号_2➡收到有效报文➡挂号_3➡收到有效报文➡溢出。
can通讯学习笔记
can中主要是对你所要的内容设置滤波器
CAN流程
1.配置相关引脚的复用功能 ,使能 CAN 时钟
can通讯学习笔记
2 设置 CAN 工作模式 及波特率等
can通讯学习笔记
3.设置滤波器
can通讯学习笔记
4.发送接收信息
5.CAN 状态获取