在 CAN 协议中,所有的消息都以固定的格式发送。总线空闲时,所有与总线相连的单元都可以开始发送新消息。两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作

can 协议

 数据帧

 

总结: 对于can 通信也只是了解 ,这种通信应用在,电机比较多,can 通信的优点就不说了。 在进行数据通信的时候要严格按照can通信的协议帧来进行发送数据。

 can总线发送部分:

 第一步:

 

第二步:

.

 

第三步:

 

第四步:

 

第五步:

报文的种类:

 每种发送的数据帧 等其他 都是报文,并且每种的报文的格式也都不相同。

总结:

浅谈USART格式:

 USART 上篇文章中 串口数据就是赋给数据帧头帧尾的标识符,后来经过学长指点学到了CRC校验,通过CRC校验判断数据是否正确。并没有时序帧。

浅谈IIC格式:

 常用帧的格式:

 标准格式

 对比 简图:

 程序部分讲解:

can通信的发送:

StdId

StdId 用来设定标准标识符。它的取值范围为 0 到 0x7FF。

ExtId

ExtId 用来设定扩展标识符。它的取值范围为 0 到 0x1FFFFFFF。

IDE

IDE 用来设定消息标识符的类型。

 RTR

RTR 用来设定待传输消息的帧类型。它可以设置为数据帧或者远

RTR 值

 

DLC

用来设定待传输消息的帧长度。它的取值范围是 0 到 0x8。 Data[8] Data[8] Data[8] Data[8] Data[8]包含了待传输数据,它的取值范围为 0 到 0xFF。 先声明一个 CanTxMsg 类型的变量,然后按照自己具体的需要,填充此结构变量就可 以发送了(帧结构中其他没有填充的部分由硬件自动完成)。 强调:这里的 StdId 或者 ExtId 是根据自己的实际需要设置的!我们先抛开它们所 代表的实际意义,认为它们存在的目的是为了“进攻”。(发送出去让别人过滤)

物联沃分享整理
物联沃-IOTWORD物联网 » 深入解析CAN通信协议

发表评论