我可以从main.c文件配置CAN过滤器,但我也希望通过从另一个节点发送帧来配置它们。我想用来配置过滤器的中断代码:
HAL_GPIO_TogglePin(LD2_GPIO_Port, LD2_Pin);
sFilterConfig.FilterMode = CAN_FILTERMODE_IDLIST;
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
sFilterConfig.BankNumber = hcan.pRxMsg->Data[1];
sFilterConfig.FilterNumber = hcan.pRxMsg->Data[2];
sFilterConfig.FilterIdHigh = (hcan.pRxMsg->Data[3])<<5;
sFilterConfig.FilterIdLow = 0;
sFilterConfig.FilterMaskIdHigh = 0;
sFilterConfig.FilterMaskIdLow = 0;
sFilterConfig.FilterFIFOAssignment = 0;
sFilterConfig.FilterActivation = ENABLE;
HAL_CAN_ConfigFilter(&hcan, &sFilterConfig);
例如,我发送数据[1] = 1,数据[2] = 0。 当我发送帧时,LED会改变它的状态,所以它应该工作。我在main.c文件中使用了类似的代码来配置STM编程时的过滤器,它可以正常工作。在STM工作时,甚至可以配置CAN过滤器吗?如果是,那么我错在哪里?