U16 std_id =0x7e9; //标准ID
U32 ext_id =0x1800f001; //扩展ID
u16 mask=0;
mask =(std_id<<18);
mask ^=ext_id;//将对齐后的标准CAN与扩展CAN异或后取反
mask =~mask;
mask <<=3;//再整体左移3位
mask |=0x02; //只接收数据帧,不接收远程帧
CAN_FilterInitStructure.CAN_FilterIdHigh= ((ext_id<<3) >>16) &0xffff; //32位ID
CAN_FilterInitStructure.CAN_FilterIdLow=(U16)(ext_id<<3) | CAN_ID_EXT;;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=(mask>>16)&0xffff;
CAN_FilterInitStructure.CAN_FilterMaskIdLow= mask&0xffff;
如下疑问:
1,CAN的ID设置根据什么有关,为何可以设置为0x7e9,0x1800f001(网上查找的别人的设置)。
2,CAN的标识符屏蔽位设置,有理解的比较清楚地吗?望能指点一二。
还有我看例程上的设置如下
CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000; //32位ID
CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;
两者的区别有大神了解吗?请指点。
|