stm32 CAN 过滤器配置问题

2019-08-17 02:40发布

        STM32 用CAN总线时,如果有多个主机向我发送数据,并且他们发送时CAN ID相同,这样会不会有问题?虽然我也能正确收到所有主机数据,如果多主机同时发送数据时,是不是CAN总线仲裁就不起作用了?
       
// 我自己的过滤器配置如下:
void CAN_Filter_Config(void)
{
        CAN_FilterInitTypeDef CAN_FilterInitStructure;
       
        CAN_FilterInitStructure.CAN_FilterNumber = 0;               
        CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
        CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;

        CAN_FilterInitStructure.CAN_FilterIdHigh = (((uint32_t)MYID<<3)& 0xFFFF0000)>>16;                                                                // 其中MYID = 0001
        CAN_FilterInitStructure.CAN_FilterIdLow = (((uint32_t)MYID<<3)|CAN_ID_EXT|CAN_RTR_DATA)&0xFFFF; // 其中CAN_ID_EXT = 0x00000004, CAN_RTR_DATA = 0x00000000
        CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0xFFFF;                                                               
          CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0xFFFF;                                                                       

        CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0;       
       
        CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;                                                               
        CAN_FilterInit(&CAN_FilterInitStructure);

        CAN_ITConfig(CAN1,CAN_IT_FMP0, ENABLE);                                       
        CAN_ITConfig(CAN1,CAN_IT_TME, ENABLE);                                       
}



// 多个主机发送端CAN ID值相同。如下:
void CANTransmitFrame()
       
        TxMessage.ExtId = SendID;                 // 0x0001
        TxMessage.IDE = CAN_ID_EXT;         // 0x00000004
        TxMessage.RTR = CAN_RTR_DATA; // 0x00000000
        TxMessage.DLC = 8;
        for(i=0;i<8;i++){
                TxMessage.Data[i]=ucFrameBuf[i];
        }
        transmailbox =        CAN_Transmit(CAN1,&TxMessage);
       
        .....................以下省略
       
}
       

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。