HAL库CAN通信

CAN通信入门

CAN通信的特点在于:发送帧的长度固定,不论数据的长短发送帧长度始终固定,信号采用差分的方式当CAN_H线和CAN_L线压差大时为显性状态(逻辑0),反之为隐性状态(逻辑1),接收帧时,不使用地址而使用ID(优先级),使用过滤器使的不需要CPU的介入就可以判断一帧数据是否需要被接收还是过滤。

一.CAN通信的帧类型

CAN通信有五种帧类型,其中最常使用也最复杂的就是数据帧。如下图所示,以下内容围绕数据帧的格式展开。
在这里插入图片描述

二、数据帧的基本组成

数据帧由七个段组成,分别是帧起始、仲裁段、控制段、数据段、CRC校验段、ACK段、帧结束。其中只有仲裁段、控制段、和数据段是需要我们按照自身需要进行配置的,其他的短都会由硬件自动计算生成。

帧起始。标准帧和扩展帧都是由1个位的显性电平表示帧起始。

仲裁段。表示数据优先级(ID)的段,标准帧和扩展帧格式在本段有所区别,

控制段。由6个位构成,表示数据段的字节数。标准帧和扩展帧的控制段稍有不同,如图所示

数据段。该段可包含0~8个字节的数据,从最高位(MSB)开始输出

CRC段。该段用于检查帧传输错误

ACK段。此段用来确认是否正常接收

帧结束。由7个位的隐性位组成

在这里插入图片描述

白色R表示置1,灰色D表示对应位置0

三、发送数据帧的具体配置

数据帧按照仲裁段的(ID)的长度不同,可以分为标准帧和扩展帧,其中标准帧的ID由前11位二进制码组成,而扩展帧则是由前11位加后18位扩展码组成的29位ID。

发送帧设置寄存器的说明:

RTR,远程请求位。0,数据帧;1, 远程帧;

SRR,替代远程请求位。设置为1(隐性电平);

IDE,标识符选择位。0,标准标识符;1,扩展标识符;

r0,r1:保留位。必须以显现电平发送,但是接收可以是隐性电平。

DLC:数据长度码。0~8,表示发送/接收的数据长度(字节)。

IDE,标识符选择位。0,标准标识符;1,扩展标识符;

四、接收数据帧的过滤器配置

过滤器的工作模式一般可以分为屏蔽位模式和标识符列表模式,通过两个32位的寄存器(标识符寄存器和屏蔽寄存器)进行设置选择可接收的CAN ID号,在屏蔽模式下目标报文的ID必须在屏蔽寄存器置1的位置与标识寄存器完全相同;而在标识符列表模式下,屏蔽寄存器也用作标识符寄存器,接收到的报文ID必须和两个标识符寄存器完全吻合。

例:

标识符寄存器为0XFF00FF00,屏蔽位寄存器为0XFFFF0000

在屏蔽模式下可接受的报文的ID必须是0XFF00XXXX(X表示任意值),而在标识符 模式下报文ID必须和两个寄存器完全吻合。

五、CAN波特率的计算

波特率=1/位时间=CAN时钟/( (1 + CAN_BS1 + CAN_BS2) * CAN_Prescaler)

波特率=1/位时间=CAN时钟/( (1 + CAN_BS1 + CAN_BS2) * CAN_Prescaler)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vxE6N0a4-1596420279014)(C:\Users\Big bang\Desktop\TIM图片20200803095914.png)]

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值