简单学习STM32CAN协议

CANController Area Network控制器局域网)协议为串行通信协议,通信距离远。常用于汽车电子行业里。

简单学习STM32CAN协议_第1张图片

目前汽车上的网络连接方式主要采用2 条 CAN:
一条用于驱动系统的高速 CAN,速率达到 500kb/s。主要面向实时性要求较高的控制元,如发动机、电动机等。
另一条用于车身系统的低速 CAN,速率是 100kb/s。主要是针对车身控制的,如车灯、车门、车窗等信号的采集以及反馈。其特征是信号多但实时性要求低,因此实现成本要求低。

CAN网络拓扑结构:

简单学习STM32CAN协议_第2张图片

这是STM32上的结构图,CAN控制器在STM32中,开发板上有CAN收发器。

CAN总线特点:

1.网络上的节点(信息)可分成不同的优先级,可以满足不同的实时要求。

2.通信速率最高可达 1MB/s(此时距离最长 40m)。

3.通信介质可采用双绞线,同轴电缆和光导纤维。

4.可以点对点、一点对多点(成组)及全局广播几种传送方式接收数据。

5.可以多主方式工作,网络上任意一个节点均可以在任意时刻主动地向网络上的其他节
点发送信息,而不分主从,通信方式灵活。

简单学习STM32CAN协议_第3张图片

CAN协议的物理层:

CAN收发器 :

CAN_H: -- 2.5V  3.5V

CAN_L: -- 2.5V  1.5V

显性电平:CAN_H 3.5  CAN_L 1.5V

隐性电平:CAN_H 2.5  CAN_L 2.5V

数字量:0 -- 显性电平 1 -- 隐性电平

在隐性状态时,CAN-High 线与 CAN-Low 线上的电压差为 0V,在显性状态时该差值最低为 2V。

报文传输:

报文传输由4个不同帧类型说表示和控制:

数据帧:数据帧携带数据从发送器至接收器。

CAN2.0A为标准规范,CAN2.0B为扩展规范。

2.0A   11位标识符+RTR(数据帧/远程帧)

        2.0B   标准:11位标识符+RTR(数据帧/远程帧)+IDE(标准还是扩展)

                   扩展:11位标识符+SRR+IDE+18+RTR  SRR为隐性位

简单学习STM32CAN协议_第4张图片



远程帧:总线单元发出远程帧,请求发送具有同一识别符的数据帧。

简单学习STM32CAN协议_第5张图片

错误帧:任何单元检测到一总线错误就发出错误帧。

过载帧:过载帧用以在先行的和后续的数据帧(或远程帧)之间提供一附加的延时。
数据帧(或远程帧)通过帧间空间与前述的各帧分开。

简单学习STM32CAN协议_第6张图片

位同步:

  位时序分解:

简单学习STM32CAN协议_第7张图片

SS段(同步段):检测跳边沿

BS1段(时间段1):位比较小,那么增加

BS2段(时间段2):位比较大,那么减小

波特率=1/1位的时间 (1位的时间就是Tq的个数)


标识符过滤:

CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关。因此发送者以广播的形式把报文发送给所以的接收者。节点在接收报文时根据标识符的值决定软件是否需要该报文。如果需要就拷贝到SRAM里,如果不需要就被丢弃。

过滤器可配置为:屏蔽位模式和标识符模式

在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照必须匹配或不用匹配进行处理。

标识符列表模式下,屏蔽寄存器也被当作标识符寄存器用。因此,不是采用一个标识符加一个屏蔽位的方式,而是使用两个标识符寄存器。接收报文标识符的每一位都必须跟过滤标识符相同。

简单学习STM32CAN协议_第8张图片



最近太忙没时间上网,写的不完整,有问题的可以留言,希望大家支持。


你可能感兴趣的:(C/C++语言)