CAN总线传送到数据是基于消息而不是地址.docx

CAN总线传送到数据是基于消息而不是地址.docx

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CAN总线传送到数据是基于消息而不是地址

CAN总线传送到数据是基于消息而不是地址的,每个消息用不同的编号表达(2.0A用11位、2.0B用29位)。在CAN上进行简单传送而自定义传送协议时,要把所有需要传送的命令列出,然后根据传送的紧急程度(优先级)从高到低进行排序,然后把最高优先级的设定一个最低的编号、以此类推...最低优先级的设定最高的编号。因为CAN物理上是不分主从,所以当有几个站点同时发送而发生碰撞时,编号最低的将优先传送。 从总线上接收消息:每个站点可能只对所有协议中的几个消息感兴趣,CAN初始化时,在过滤器中设置本站点需要接收的消息编号,这样一旦总线上有需要的消息将会自动接收,并产生中断,通知CPU收到新消息,CPU在中断程序中接收、处理。 发送消息到总线上:CAN初始化时设置本站点将来需要发送的消息编号,当运行过程中需要发送消息时,填入相关数据,设置相关消息对象发送。 CAN控制器内部一般设有32个消息对象,分成2组,分别各用一组寄存器来操作。一般一组用来接收过滤,另一组用来发送。 STM32普通型芯片的 CAN 有14组过滤器组(互联型有28组过滤器组) ,用以对接收到的 帧进行过滤。每组过滤器包括了2个可配置的32位寄存器:CAN_FxR0和 CAN_FxR1。 对于过滤器组, 可以将其配置成屏蔽位模式, 这样 CAN_FxR0中保存的就是标识符匹配值, CAN_FxR1中保存的是屏蔽码,即 CAN_FxR1中如果某一位为1,则 CAN_FxR0中相应 的位必须与收到的帧的标志符中的相应位吻合才能通过过滤器; CAN_FxR1中为0的位表 示 CAN_FxR0中的相应位可不必与收到的帧进行匹配。 过滤器组还可以被配置成标识符列 表模式,此时 CAN_FxR0和 CAN_FxR1中的都是要匹配的标识符,收到的帧的标识符必 须与其中的一个吻合才能通过过滤。 注意:CAN_FilterIdHigh 是指高16位 CAN_FilterIdLow 是低16位应该将需要得到的帧 的和过滤器的设置值左对齐起。 一般我们用的都是普通型的,所以在本文中可以说 STM32有14组过滤器组。 根据配置,每1组过滤器组可以有1个,2个或4个过滤器。 这些过滤器相当于关卡,每当收到一条报文时,CAN 要先将收到的报文从这些过滤器上 过一下,能通过的报文是有效报文,收进 FIFO,不能通过的是无效报文(不是发给我 的报文),直接丢弃。 所有的过滤器是并联的,即一个报文只要通过了一个过滤器,就是算是有效的。 每组过滤器组有两种工作模式:标识符列表模式和标识符屏蔽位模式。 在标识符列表模式下,收到报文的标识符必须与过滤器的值完全相等才能通过。 在标识符屏蔽位模式下,可以指定标识符的哪些位为何值时就算通过。这其实就是限定了 处于某一范围的标识符能够通过。 在一组过滤器中,整组的过滤器都使用同一种工作模式。 另外,每组过滤器中的过滤器宽度是可变的,可以是32位或16位。 按工作模式和宽度,一个过滤器组可以变成以下几中形式之一: (1) 1个32位的屏蔽位模式的过滤器。 (2) 2个32位的列表模式的过滤器。 (3) 2个16位的屏蔽位模式的过滤器。 (4) 4个16位的列表模式的过滤器。 所有的过滤器是并联的,即一个报文只要通过了一个过滤器,就是算是有效的。 每组过滤器组有两个32位的寄存器用于存储过滤用的标准值,分别是 FxR1,FxR2。 在32位的屏蔽位模式下: 有1个过滤器。 FxR2用于指定需要关心哪些位,FxR1用于指定这些位的标准值。 在32位的列表模式下: 有两个过滤器。 FxR1指定过滤器0的标准值,收到报文的标识符只有跟 FxR1完全相同时,才算通过。 FxR2指定过滤器1的标准值。 在16位的屏蔽位模式下: 有2个过滤器。 FxR1配置过滤器0,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值。 FxR2配置过滤器1,其中,[31-16]位指定要关心的位,[15-0]位指定这些位的标准值。 在16位的列表模式下: 有4个过滤器。 FxR1的[15-0]位配置过滤器0,FxR1的[31-16]位配置过滤器1。 FxR2的[15-0]位配置过滤器2,FxR2的[31-16]位配置过滤器3。 STM32的 CAN 有两个 FIFO,分别是 FIFO0和 FIFO1。为了便于区分,下面 FIFO0写作 FIFO_0,FIFO1写作 FIFO_1。 每组过滤器组必须关联且只能关联一个 FIFO。复位默认都关联到 FIFO_0。 所谓“关联”是指假如收到的报文从某个过滤器通过了,那么该报文会被存到该过滤器相连 的 FIFO。 从另一方面来说,每个 FIFO 都关联了一串的过滤器组,两个 FIFO 刚好瓜分了所有的过 滤器组。 每当收到一个报文,CAN

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档