CAN通讯的学习(二)

前言
前面已经介绍过CAN的一些基本原理,这次我们来接着介绍CAN的控制器以及其时序结构
学习资料均来自正点原子
CAN的协议
STM32F1自带的CAN是bxCAN,其支持CAN2.0A&CAN2.0B
其处理的报文的能力十分高效,F1的bxCAN包含了3个发送邮箱以及2个具有三级深度的接收FIFO,且具备有14个过滤器,这三者组成了bxCAN的核心
此外,bxCAN波特率高达1Mbps且支持时间触发通信(可以在TX/RX的帧起始处记录时间戳)
CAN控制器模式
工作模式

CAN控制器模式包含三种,复位后会先进入初始化模式降低设备的功耗,当我们要修改CAN的一些协议信息以及配置时就要进入初始化模式,配置完成后进入正常模式开启接收和发送报文的工作
其中正常模式工作流程如下


其工作在总线的正常节点中
测试模式
测试模式分为静默模式、环回模式以及环回静默模式
静默模式


此时设备只能向总线发送隐性电平且不能发送显性电平,可以从总线接收数据,该模式下用于检测以及统计总线的流量
环回模式


该模式下发送到总线的数据可以直接发送至接收端,但不能从总线接收数据,该模式下用于设备的自我检测
环回静默模式


此模式下和静默模式类似,但不会占用总线资源

 通信部分

由图可以看出发送是由邮箱控制的,接收则是由FIFO控制,在发送和接收之间会经过对应的滤波器对报文进行选择
发送模式

CAN的发送流程如下:
程序会先寻找一个空闲的邮箱,然后设置ID/DLC/DATA的数据帧,此时邮箱退出空闲状态进入挂号状态
在挂号状态下邮箱会请求要发送数据,若其并不是优先级最高的邮箱,则会进入预定发送状态,等到上一个高优先级的邮箱处理完且总线空闲时就会将当前邮箱变成发送状态
当报文发送成功后就会重新进入空闲状态,优先级由报文中的标识符决定
接收过滤器
当总线上的报文数据量很大时,总线上的设备会频繁获取报文占用CPU,此时就需要过滤器来选择性地接收报文减轻系统的负担


通过配置CAN_FMR寄存器可以配置过滤器的工作模式,不同的工作模式可以处理不同的数据帧(标准帧/扩展帧)
由两种模式可供选择:

其中屏蔽模式具体实现就是将过滤器的要匹配ID用的位数置1进而进行筛选,若所有都能匹配上才能称其为有效报文


如上图,屏蔽位为1的地方在所有报文中中有31-24位是1的才能被筛选出来,而23-16位具体是什么数值则无所谓,因为过滤器在这些对应位上值为0
列表模式就很简单了,和列表不同的ID全部pass
接收模式



当空闲的FIFO收到有效报文(经过过滤器筛选后的报文)后FIFO会进入挂号1,若有效报文的数量很多,此时FIFO并不会马上读取报文,则会进入挂号2状态
反之当报文被读取到时则会释放对应的邮箱且取消该深度的挂号状态,若尚未读取完就发生了报文溢出,可以通过配置FIFO寄存器决定要丢弃的报文是哪一个深度的
CAN控制器位时序
这里的位时序和前面提到的协议中的时序有所不同,STM32的CAN位时序将PTS段和PBS1段合并到了一起,因此其只有三个段

上图中波特率计算为1s/一个位的时间,TBS1&TBS2的Tq值通过寄存器配置,Tq的值也通过寄存器配置,其中TPCLK为系统时钟频率,CAN的外设挂载在36M的总线上
最终的波特率计算公式如下

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值