K60 CAN 过滤设置

举报
TopSemic嵌入式 发表于 2021/10/19 00:09:14 2021/10/19
【摘要】 如何只接收特定ID的CAN帧呢? 设置CANx_RXIMRn, 这是一个31bit的寄存器, 格式按照这个设置。 0表示不care 1表示care void CAN_SetRxFi...

如何只接收特定ID的CAN帧呢?
这里写图片描述

这里写图片描述

设置CANx_RXIMRn,
这是一个31bit的寄存器,
这里写图片描述
格式按照这个设置。
0表示不care
1表示care

void CAN_SetRxFilterMask(uint32_t instance, uint32_t mb, uint32_t mask)
{
    CANBase[instance]->MCR |= (CAN_MCR_FRZ_MASK | CAN_MCR_HALT_MASK);
    while(!(CAN_MCR_FRZACK_MASK & (CANBase[instance]->MCR))) {}; 
    if(mask > 0x7FF)
    {    
      //  CANBase[instance]->RXIMR[mb] = CAN_ID_EXT(mask); 

             CANBase[instance]->RXIMR[mb] =(((uint32_t)(((uint32_t)(mask))<<CAN_ID_EXT_SHIFT))&(CAN_ID_EXT_MASK|CAN_ID_STD_MASK ));

    }
    else
    {
        //CANBase[instance]->RXIMR[mb] = CAN_ID_STD(mask); 

             CANBase[instance]->RXIMR[mb] = (((uint32_t)(((uint32_t)(mask))<<CAN_ID_STD_SHIFT))&CAN_ID_STD_MASK);
    }

    CANBase[instance]->MCR &= ~(CAN_MCR_FRZ_MASK | CAN_MCR_HALT_MASK);
    while((CAN_MCR_FRZACK_MASK & (CANBase[instance]->MCR)));
}


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
/* ID Bit Fields */
#define CAN_ID_EXT_MASK                          0x3FFFFu
#define CAN_ID_EXT_SHIFT                         0
#define CAN_ID_EXT(x)                            (((uint32_t)(((uint32_t)(x))<<CAN_ID_EXT_SHIFT))&CAN_ID_EXT_MASK)
#define CAN_ID_STD_MASK                          0x1FFC0000u
#define CAN_ID_STD_SHIFT                         18
#define CAN_ID_STD(x)                            (((uint32_t)(((uint32_t)(x))<<CAN_ID_STD_SHIFT))&CAN_ID_STD_MASK)
#define CAN_ID_PRIO_MASK                         0xE0000000u
#define CAN_ID_PRIO_SHIFT                        29
#define CAN_ID_PRIO(x)                           (((uint32_t)(((uint32_t)(x))<<CAN_ID_PRIO_SHIFT))&CAN_ID_PRIO_MAS
  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

设置的时候调用:

CAN_SetRxFilterMask(HW_CAN1,3,0x7FF);// wenxue  标准帧11bits 
111 1111 1111
  
 
  • 1
  • 2

或者

 CAN_SetRxFilterMask(HW_CAN1,3,0x1FFFFFF);// wenxue  扩展帧 29 bits  1 1111 1111 1111 1111 1111 1111 1111
  
 
  • 1

CAN 扩展帧ID为29位,标准帧为11位

文章来源: blog.csdn.net,作者:TopSemic嵌入式,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/wangwenxue1989/article/details/53117568

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。