心向朝阳 发表于 2022-12-5 15:49

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

在CAN使用过程中,需要对总线上的报文做接收处理,但一般使用场景来说,总线上报文繁多,我们不会对总线上所有的报文全部接收,只需要接收我们需要的报文即可,下面小编通过典型实例来介绍一下如何配置过滤器来实现对特定ID报文的接收

心向朝阳 发表于 2022-12-5 15:50

例1:需要过滤一个ID为0x22A的数据标准帧,将过滤器初始化函数这样配置即可(以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   0x0000void 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:需要过滤一个ID为0x18FF0320的数据扩展帧,我们将过滤器初始化函数这样配置即可(以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   0x0000void 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);
}
页: [1]
查看完整版本: N32使用CAN列表模式过滤指定ID报文