STM32 CAN过滤器设置 作者: 时间:2016-11-26 来源:网络 加入技术交流群 扫码加入和技术大咖面对面交流海量资料库查询 收藏 看来还是很多人不会设置过滤器,我也看了很久才会,大家先去看一个寄存器CAN_TIxR(x=0~2) 发送邮箱标识寄存器标准帧在 31~21位共11位 STID[10:0]扩展帧在 20~3 位共29位 EXID[17:0]+STID[10:0]0~2 位分别为 TXRQ ,RTR ,IDEuint16_t CAN_ID = 0x0101uint32_t ExCAN_ID= 0x10001所以设置标位帧ID过滤应该这样设:CAN_FilterInitStructure.CAN_FilterIdHigh = CAN_ID<<5;CAN_FilterInitStructure.CAN_FilterIdLow= 0;CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0xFFFF;CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0xFFFC;//RTR 可以为数据帧也可以远帧//注意接收到对方的数据帧的标志寄存器中的TXRQ肯定是为0的,IDE表示标志符模式(标志or扩展),RTR表示是数据帧还是远程帧扩展帧ID过滤应该这样设:CAN_FilterInitStructure.CAN_FilterIdHigh = (uint16_t)(ExCAN_ID>>(29-16));//取高16位CAN_FilterInitStructure.CAN_FilterIdLow= (uint16_t)(ExCAN_ID<<3)|CAN_ID_EXT;CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0xFFFF;CAN_FilterInitStructure.CAN_FilterMaskIdLow0xFFFC;//RTR 可以为数据帧也可以远帧今天刚学会,大家有不懂可以问,不过一般官方资料里就有,仔细阅读就可以了,如果你想两种帧都接收,那就把IDE位也屏蔽掉可以这样CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0xFFFC&(~CAN_ID_EXT);
评论