CAN滤波器调试了好几天都还是不成功。
CAN_FilterInitStructure.CAN_FilterIdHigh= (((u32)ID_Can<<3)&0x7ff0000)>>16;
CAN_FilterInitStructure.CAN_FilterIdLow= (((u32)ID_Can<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xf800;
这两个配置的是需要能过通过的ID号
CAN_FilterInitStructure.CAN_FilterMaskIdHigh= (((u32)ID_Can<<3)&0x7ff0000)>>16;
CAN_FilterInitStructure.CAN_FilterMaskIdLow= ((((u32)ID_Can<<3)&0xf800)|CAN_ID_EXT|CAN_RTR_DATA);
这两个配置的是需要对齐的位
不知道我的理解是否有误。
目前我多有节点ID都放在标识符8到23位(使用的是扩展帧),所以我配置时候滤波忽略0-8以及24-28位(滤波器这里因为左对齐实际数据会左移3位暂时不考虑)。
当前主机地址是0x00,其他节点是可以配置的地址是0x01-0xff。
目前我需要接收除了主机0x00以外还有其他节点多个地址的数据也需要接收(其他节点的地址会事先通过主机告诉该节点),这时我需要如何配置才能让我需要的节点和主机数据都能通过我的滤波器。 |