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);
評論