<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();