新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32 CAN過濾器設置

        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 ,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 可以為數據幀也可以遠幀
        //注意接收到對方的數據幀的標志寄存器中的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);


        關鍵詞: STM32CAN過濾器設

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 淅川县| 东源县| 武乡县| 拜泉县| 南开区| 珠海市| 榆林市| 通州市| 柳州市| 广元市| 玉树县| 柳河县| 沐川县| 轮台县| 特克斯县| 廊坊市| 库尔勒市| 井陉县| 高雄县| 彭山县| 分宜县| 玉田县| 子洲县| 青州市| 汪清县| 简阳市| 姜堰市| 清水县| 兴文县| 高碑店市| 堆龙德庆县| 榆林市| 深泽县| 九江市| 花垣县| 阿坝县| 勐海县| 峨眉山市| 澜沧| 崇信县| 治多县|