can_filter.filter_number = 0;
can_filter.filter_mode = CAN_FILTERMODE_MASK;
can_filter.filter_bits = CAN_FILTERBITS_32BIT;
can_filter.filter_list_high = ((0X0757A800<<3)&0XFFFF0000)>>16;
can_filter.filter_list_low = (uint16_t)((0X0757A800<<3)|(4)&0XFFFF);
can_filter.filter_mask_high = 0XFFFF;
can_filter.filter_mask_low = (uint16_t)(0XFF00<<3);
can_filter.filter_fifo_number = CAN_FIFO0;
can_filter.filter_enable = ENABLE;
can_filter_init(&can_filter);
can_filter.filter_number = 1;
can_filter.filter_mode = CAN_FILTERMODE_LIST;
can_filter.filter_bits = CAN_FILTERBITS_32BIT;
can_filter.filter_list_high = ((0X0757A900<<3)&0XFFFF0000)>>16;
can_filter.filter_list_low = (uint16_t)((0X0757A900<<3)|(4)&0XFFFF);
can_filter.filter_mask_high = 0;
can_filter.filter_mask_low = 0;
can_filter.filter_fifo_number = CAN_FIFO0;
can_filter.filter_enable = ENABLE;
can_filter_init(&can_filter);
AI写代码
c
运行
对于过滤器0,设置掩码模式,配置为扩展帧ID,接收范围0X0757A800到0X0757A8FF,低8位可以为任意值,由filter_mask_high 和filter_mask_low决定 。对于过滤器1,设置列表模式,配置为扩展帧ID,只能接收0X0757A900这个ID,filter_mask_high 和filter_mask_low 设置无效。
在图片的低3位,FF:1表示扩展帧,0表示标准帧。FT:1表示遥控帧,0表示数据帧。所以过滤数据ID值和掩码值需要左移3位,然后在filter_list_low 加4,表示扩展帧,按道理filter_mask_low 也要加4,但是我没加,也可以达到目的。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_45449075/article/details/147889796
|