标准帧 扩展帧

大家先去看一个寄存器  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 可以为数据帧也可以远帧

扩展帧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_FilterMaskIdLow   = 0xFFFC;            //RTR 可以为数据帧也可以远帧

今天刚学会,大家有不懂可以问,不过一般官方资料里就有,仔细阅读就可以了,如果你想两种帧都接收,那就把IDE位也屏蔽掉

可以这样                CAN_FilterInitStructure.CAN_FilterMaskIdLow   = 0xFFFC&(~CAN_ID_EXT);
G T
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值