新聞中心

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

STM32 CAN過濾器設(shè)置

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

標(biāo)準(zhǔn)幀在 31~21位共11位 STID[10:0]

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

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

uint16_t CAN_ID = 0x0101
uint32_t ExCAN_ID= 0x10001

所以設(shè)置標(biāo)位幀ID過濾應(yīng)該這樣設(shè):

CAN_FilterInitStructure.CAN_FilterIdHigh = CAN_ID<<5;
CAN_FilterInitStructure.CAN_FilterIdLow= 0;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh= 0xFFFF;
CAN_FilterInitStructure.CAN_FilterMaskIdLow= 0xFFFC;//RTR 可以為數(shù)據(jù)幀也可以遠(yuǎn)幀
//注意接收到對方的數(shù)據(jù)幀的標(biāo)志寄存器中的TXRQ肯定是為0的,IDE表示標(biāo)志符模式(標(biāo)志or擴(kuò)展),RTR表示是數(shù)據(jù)幀還是遠(yuǎn)程幀

擴(kuò)展幀ID過濾應(yīng)該這樣設(shè):
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ù)據(jù)幀也可以遠(yuǎn)幀

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

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


關(guān)鍵詞: STM32CAN過濾器設(shè)

評論


技術(shù)專區(qū)

關(guān)閉