最近学习CAN总结

1,can一次可以发送少于8个字节,只是最多可以发8个。

2,   32位屏蔽位模式如何设置过滤器参数?

在32位宽的模式下,CAN_FxR1与CAN_FxR2都用来存储希望通过的CANID,由于是32位宽的,因此既可以存储标准CAN ID,也可以存储扩展CAN ID。

注意看上图最底下Mapping那行的各位定义,可以看出,从右到左,首先,最低位是没有用的,然后是RTR,表示是否为远程帧,接着IDE,扩展帧标志,然后才是EXID[0:17]这18位扩展ID,最后才是STID[0:10]这11位标准ID,也就是前面所说的基本ID。在进行配置的时候,即将希望通过的CAN ID写入的时候,要注意各个位对号入座,即基本ID放到对应的STD[0:10],扩展ID对应放到EXID[0:17],若是扩展帧,则需要将IDE设为“1”,标准帧则为“0”,数据帧设RTR为“0”,远程帧设RTR为“1”。

(参考https://blog.csdn.net/flydream0/article/details/52317532

比如设置ID的低5位必须与设置的相同,高6位忽略。

标准库中CAN_FilterIdHigh 对应上图ID行的CAN_FXR1[31:16]

CAN_FilterIdLow 对应上图ID行的CAN_FXR1[15:0]

CAN_FilterMaskIdHigh对应上图ID行的CAN_FXR2[31:16]

CAN_FilterMaskIdLow 对应上图ID行的CAN_FXR2[15:0]

对于标准ID(STID)对应的位是高11位,也就是对应ID或者mask的CAN_FXR1[31:21]或CAN_FXR2[31:21],所以设置CAN_FilterIdHigh 或 CAN_FilterMaskIdHigh 的值时要左移5位.

CAN_FilterIdHigh和CAN_FilterIdLow是对应ID,定义可以通过的id

CAN_FilterMaskIdHigh和CAN_FilterMaskIdLow 是设置屏蔽位

比如 id=0x02

屏蔽id=0x1f = 0001 1111,则表示低5位必须与id中定义的低5位值相同,即低5位必须等于2才能通过,其他位忽略。

由于是标准数据帧,所以IDE为“0”,RTR为“0”,所以CAN_FilterIdLow 和CAN_FilterMaskIdLow都=0.

   CAN_FilterInitStructure.CAN_FilterIdHigh = 0x02 << 5;                     //
    CAN_FilterInitStructure.CAN_FilterIdLow = 0;                                  //设定过滤器标识符低位(32为低位段,16位为第二个)
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0x1f << 5;              //设定过滤器标识符高位(32为高位段,16位为第一个)
    CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0; 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值