STM32 CAN总线工作原理

CAN总线工作原理

CAN是什么?

CAN是Controller Area Network的缩写(以下称为CAN),是ISO*1国际标准化的串行通信协议。

    在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个LAN,进行大量数据的高速通信”的需要,1986年德国电气商博世公司开发出面向汽车的CAN通信协议。此后,CAN通过ISO11898及ISO11519进行了标准化,现在在欧洲已是汽车网络的标准协议。

    现在,CAN的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。

下图是车载网络的构想示意图。CAN通信协议的开发,使多种LAN通过网关进行数据交换得以实现。

CAN的特点

(1)  多主控制

     在总线空闲时,所有的单元都可以发送消息(多主控制)。最先访问总线的单元可获得发送权。多个单元同时开始发送时,发送高优先级ID消息的单元可获得发送权,所有的消息都以固定的格式发送。

 

(2)  系统的柔软性

     与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。

 

(3)  通信速度

     根据整个网络的规模,可设定适合的通信速度。在同一网络中,所有单元必须设定成统一的通信速度。即使有一个单元的通信速度与其它的不一样,此单元也会输出错误信号,妨碍整个网络的通信。不同网络间则可以有不同的通信速度。

(4)  远程数据请求

     可通过发送“遥控帧”  请求其他单元发送数据。

 

(5)  错误检测功能·错误通知功能·错误恢复功能

     所有的单元都可以检测错误(错误检测功能)。

     检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。

     正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。

 

(6)  故障封闭

     CAN可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。

 

(7)  连接

     CAN总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。

STM32 bxCAN主要特点

●  支持CAN协议2.0A和2.0B主动模式

●  波特率最高可达1兆位/秒

●  支持时间触发通信功能

发送

●  3个发送邮箱

●  发送报文的优先级特性可软件配置

●  记录发送SOF时刻的时间戳

接收

● 3级深度的2个接收FIFO

●  可变的过滤器组:

─  在互联型产品中,CAN1和CAN2分享28个过滤器组

─  其它STM32F103xx系列产品中有14个过滤器组

●  标识符列表

●  记录接收SOF时刻的时间戳

时间触发通信模式

●  禁止自动重传模式

●  16位自由运行定时器

●  可在最后2个数据字节发送时间戳管理

●  中断可屏蔽

初学者需要关注的几个重点

1.隐性位与显性位

CAN总线为“隐性”(逻辑1)时,CAN_HCAN_L的电平为2.5V(电位差为0V);

 

CAN总线为“显性”(逻辑0)时,CAN_HCAN_L的电平分别是3.5V1.5V(电位差为2.5V

2.数据帧类型:

(1) 标准数据帧

(2) 扩展数据帧

(3) 标准远程帧

(4) 扩展远程帧

3.位时间特性

CAN总线上的所有器件都必须使用相同的比特率。然而,并非所有器件都要求具有相同的主振荡器时钟频率。对于采用不同时钟频率的器件,应通过适当设置波特率预分频比以及每一时间段中的时间份额的数量来对比特率进行调整。

 

● 同步段(SYNC_SEG):同步段为首段,用于同步CAN总线上的各个节点。输入信号的跳变沿就发生在同步段,该段持续时间为1TQ。

 

● 时间段1(BS1):定义采样点的位置。其值可以编程为1到16个时间单元,但也可以被自动延长,以补偿因为网络中不同节点的频率差异所造成的相位的正向漂移。

 

● 时间段2(BS2):定义发送点的位置。其值可以编程为1到8个时间单元,但也可以被自动缩短以补偿相位的负向漂移。

 

重新同步跳跃宽度(SJW)定义了,在每位中可以延长或缩短多少个时间单元的上限。其值可以编程为1到4个时间单元。

CAN波特率计算公式

CAN波特率=系统时钟/分频数/(1*tq+tBS1+tBS2)

其中

   tBS1=tq*(TS1[3:0]+1)

tBS2=tq*(TS2[2:0]+1)

tq=(BRP[9:0]+1)*tPCLK

这里tq表示1个时间单元

tPCLK=APB时钟的时间周期

BRP[9:0],TS1[3:0]和TS2[2:0]在CAN_BTR寄存器中定义

总体配置保持

   tBS1>=tBS2,tBS2>=1个CAN时钟周期,tBS2>=2tSJW

 

4.屏蔽滤波

(1) 屏蔽位模式

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

 

(2) 标识符列表模式

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

 

为了过滤出一组标识符,应该设置过滤器组工作在屏蔽位模式。

为了过滤出一个标识符,应该设置过滤器组工作在标识符列表模式。

5.bxCAN工作模式

bxCAN3个主要的工作模式:初始化、正常和睡眠模式。

还包括:测试模式、静默模式、环回模式、环回静默模式

 

 

  • 3
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值