打印
[N32G45x]

N32使用CAN列表模式过滤指定ID报文

[复制链接]
513|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
心向朝阳|  楼主 | 2022-12-5 15:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在CAN使用过程中,需要对总线上的报文做接收处理,但一般使用场景来说,总线上报文繁多,我们不会对总线上所有的报文全部接收,只需要接收我们需要的报文即可,下面小编通过典型实例来介绍一下如何配置过滤器来实现对特定ID报文的接收

使用特权

评论回复
沙发
心向朝阳|  楼主 | 2022-12-5 15:50 | 只看该作者
例1:需要过滤一个ID0x22A的数据标准帧,将过滤器初始化函数这样配置即可(以N32G45X为例):


#define CAN_FILTER_STDID(STDID)       ((STDID&0x7FF)<<5)
#define CAN_STD_ID_H_MASK_DONT_CARE   0x0000
#define CAN_STD_ID_L_MASK_DONT_CARE   0x0000
void CAN_Filter_Init(void)  
{  
    CAN_FilterInitType CAN_FilterInitStructure;  
    CAN_FilterInitStructure.Filter_Num            = CAN_FILTERNUM0;  
    CAN_FilterInitStructure.Filter_Mode           = CAN_Filter_IdListMode;  
    CAN_FilterInitStructure.Filter_Scale          = CAN_Filter_32bitScale;  
    CAN_FilterInitStructure.Filter_HighId         = CAN_FILTER_STDID(0x22A);  
    CAN_FilterInitStructure.Filter_LowId          = CAN_FILTER_STDID(0x22A);  
    CAN_FilterInitStructure.FilterMask_HighId     = CAN_STD_ID_H_MASK_DONT_CARE;  
    CAN_FilterInitStructure.FilterMask_LowId      = CAN_STD_ID_L_MASK_DONT_CARE;  
    CAN_FilterInitStructure.Filter_FIFOAssignment = CAN_FIFO0;  
    CAN_FilterInitStructure.Filter_Act            = ENABLE;  
    CAN1_InitFilter(&CAN_FilterInitStructure);  
}  



使用特权

评论回复
板凳
心向朝阳|  楼主 | 2022-12-5 15:51 | 只看该作者
2:需要过滤一个ID0x18FF0320的数据扩展帧,我们将过滤器初始化函数这样配置即可(以N32G45X为例):


#define CAN_FILTER_EXTID_H(EXTID)    ((EXTID<<3)>>16)&0xffff
#define CAN_FILTER_EXTID_L(EXTID)    ((EXTID)<<3)&0xffff | CAN_ID_EXT
#define CAN_STD_ID_H_MASK_DONT_CARE   0x0000
#define CAN_STD_ID_L_MASK_DONT_CARE   0x0000
void CAN_Filter_Init(void)  
{
    CAN_FilterInitType CAN_FilterInitStructure;  
    CAN_FilterInitStructure.Filter_Num            = CAN_FILTERNUM0;  
    CAN_FilterInitStructure.Filter_Mode           = CAN_Filter_IdListMode;  
    CAN_FilterInitStructure.Filter_Scale          = CAN_Filter_32bitScale;  
    CAN_FilterInitStructure.Filter_HighId         = CAN_FILTER_EXTID_H(0x18FF0320);  
    CAN_FilterInitStructure.Filter_LowId          = CAN_FILTER_EXTID_L(0x18FF0320);  
    CAN_FilterInitStructure.FilterMask_HighId     = CAN_STD_ID_H_MASK_DONT_CARE;  
    CAN_FilterInitStructure.FilterMask_LowId      = CAN_STD_ID_L_MASK_DONT_CARE;  
    CAN_FilterInitStructure.Filter_FIFOAssignment = CAN_FIFO0;  
    CAN_FilterInitStructure.Filter_Act            = ENABLE;  
    CAN1_InitFilter(&CAN_FilterInitStructure);  

}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

60

帖子

2

粉丝