【CubeMX学习笔记】关于CAN通信协议

目录

一、CAN通信简介

二、CAN数据帧类型

三、格式帧

四、位同步

传输数据时可能遇到的问题

最小时间单位

硬同步

再同步

波特率的计算

=============STM32中的CAN外设=============

一、原理图

二、标识符筛选

三、配置单个邮箱(正常模式或自发自收只需要修改模式)

四、如何配置两个邮箱(用于接收两个电机的数据) 


一、CAN通信简介

can通信只有两根信号线(CAN High)和CAN_L(CAN Low),所有设备都搭载在这两根信号线上,可以实现多设备之间的高速实时的通信。其中每个设备都可以是主机/从机,都有对can总线的控制权。

can通信使用差分信号,不容易受干扰。当两根通信线的电压相同时,属于隐形电平1,当CANH被拉高而CANL被拉低时,属于显性电平0。在没有进行通信时,can总线表现为隐性电平1,当需要进行数据传输时,有且只有一个设备对can总线进行控制,其他设备选择是否接收。(当出现错误、过载或者应答时,其他设备才可以对总线进行控制)

二、CAN数据帧类型

这里主要了解的是数据帧。

三、格式帧

SOF:帧起始,数据传输开始时,总线从隐性电平1转变成显性电平0;

ID:11位设备ID号,表示设备信息,用于仲裁;

RTR:远程传输请求,用于区分数据帧(0)和遥控帧(1)(数据帧优先级高)

IDE:区分标准格式帧和扩展格式帧(0:为标准格式)

RB0:保留位(默认逻辑0)

DLC:4位,表示数据长度(字节),最多表示8字节,即64位;

CRC:校验位,检测数据是否错误;

CRC界定符:恒为隐性1,表示发送结束;

ACK:应答处理,发送端表现为隐性1,如果有设备接收了数据,那个设备会表现为显性电平1,此时整个can总线表现为显性电平;

ACK界定符:为隐性1,表示应答结束;

EOF:帧结束,为7位的隐性电平1;

SRR:用于代替RTR,真正的RTR在扩展ID后面,由于标准格式优先级高于扩展格式优先级,所以这一位虽然没用,但是必须为隐性1;

RB1,RB0:保留位(总是显性电平)

关于位填充

当发送数据连续五个位是相同的时,会自动发送一个相反位的数据,接收方接收时,也会自动去除这个位。

关于仲裁段

如果有两个设备同时开始发送数据,则会进行仲裁,ID号小的会在此获胜,继续数据发送,ID号大的则会退出。如果ID号相同,则标准格式帧优先。

四、位同步

CAN总线没有时钟线,总线上的所有设备通过约定波特率的方式确定每一个数据位的时长;

发送方以约定的位时长每隔固定时间输出一个数据位;

接收方以约定的位时长每隔固定时间采样总线的电平,输入一个数据位;

理想状态下,接收方能依次采样到发送方发出的每个数据位,且采样点位于数据位中心附近。

传输数据时可能遇到的问题

一个是接收设备的采样点可能位于跳变沿周围,导致采样信号不准确;一个是接收设备和发送设备的时钟有一点点偏差,导致采样信号不准确。

为了避免这两个问题,有硬同步再同步两个方法。

最小时间单位

为了灵活调整每个采样点的位置,使采样点对齐数据位中心附近,CAN总线传播时间段对每一个数据位的时长进行了更细的划分,分为同步段(SS)(PTS)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2)每个段又由若干个最小时间单位(Tq)构成。后面三个数据可以自己指定长度。

其中PTS用于处理网络延迟,PBS1和PBS2长度可以改变,用于再同步。

硬同步

当有设备需要发送数据时,它会选择在自身时钟周期的ss段进行发送,此时其他设备接收到跳变信号,会将自己的时钟之间调整到ss段,实现同步。

再同步

为了解决设备时钟有偏差的问题,接收设备可以对自己的时间进行补偿,通过补偿宽度值(SWJ)加长PBS1或缩短PBS2对时序进行补偿。

波特率的计算

=============STM32中的CAN外设=============

一、原理图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值