打印
[STM32F1]

CAN总线的过滤ID设置问题

[复制链接]
5249|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
autooy|  楼主 | 2014-4-12 21:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
偶滴CAN总线发送等都OK了,但是再接受这个过滤器上碰见问题了,我没有使用全通模式:
          CAN_FilterInitStructure.CAN_FilterIdHigh=//0x0000;////32位ID
          CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
          CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//32位MASK
          CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;       
而是采用采用了全匹配方案,由于我的站点号是接受外部大约10个设备发过来的数据,所以,我就不知道具体怎么设置这个初始化过滤器组了,难道需要我全通模式,然后在接收中断里一个一个去判断这些EID与SID号么?比如,我的EXT.ID=0X06080000,这高四位是6号站点的信息,主机号是1,所以是0608,低4位是TCW是字宽控制位,是变动的。那我得怎么设置,10个不同站点的初始化合适啊?请熟知者帮忙解答,谢谢。
下面是我的设置,不知道对不对:
          CAN_FilterInitStructure.CAN_FilterIdHigh=(((u32)0x06080000<<3)&0xFFFF0000)>>16;////32位ID
          CAN_FilterInitStructure.CAN_FilterIdLow=(((u32)0x06080000<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0XFFFF;
          CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0xFFFF;//32位MASK,使用全匹配方案;
          CAN_FilterInitStructure.CAN_FilterMaskIdLow=0xFFFF;         
沙发
airwill| | 2014-4-13 07:52 | 只看该作者
难道需要我全通模式,然后在接收中断里一个一个去判断这些EID与SID号么?          肯定不需要.
怎么设置?
1. 采用采用了全匹配方案, 使用 5 个过滤器, 因为每一个过滤器可以设置2个允许的ID.
2. 使用过滤方案,  最少使用 1 个过滤器, FilterId 可以是 0X06080000, FilterMaskId 可以是 0xFFFF0000, 根据你自己的协议确定.

注意一下: 屏蔽位设置
寄存器的每位指示是否对应的标识符寄存器位一定要与期望的标识符的相应位一致。
0: 不关心,该位不用于比较;
1: 必须匹配,到来的标识符位必须与滤波器对应的标识符寄存器位相一致。

使用特权

评论回复
板凳
autooy|  楼主 | 2014-4-19 19:42 | 只看该作者
谢谢,问题我已经解决了。我目前设置的是全通模式了,但是再接受函数里,对其进行判断的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

337

主题

684

帖子

8

粉丝