新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32 CAN過濾器設置

STM32 CAN過濾器設置

作者: 時間:2016-11-26 來源:網絡 收藏
看來還是很多人不會設置過濾器,我也看了很久才會,大家先去看一個寄存器CAN_TIxR(x=0~2) 發(fā)送郵箱標識寄存器

標準幀在 31~21位共11位 STID[10:0]

擴展幀在 20~3 位共29位 EXID[17:0]+STID[10:0]

0~2 位分別為 TXRQ ,RTR ,IDE

uint16_t CAN_ID = 0x0101
uint32_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 可以為數(shù)據幀也可以遠幀
//注意接收到對方的數(shù)據幀的標志寄存器中的TXRQ肯定是為0的,IDE表示標志符模式(標志or擴展),RTR表示是數(shù)據幀還是遠程幀

擴展幀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 可以為數(shù)據幀也可以遠幀

今天剛學會,大家有不懂可以問,不過一般官方資料里就有,仔細閱讀就可以了,如果你想兩種幀都接收,那就把IDE位也屏蔽掉

可以這樣CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0xFFFC&(~CAN_ID_EXT);


關鍵詞: STM32CAN過濾器設

評論


技術專區(qū)

關閉