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);
       
        .....................以下省略
       
}
       

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
正点原子
1楼-- · 2019-08-17 03:54
仲裁机制保证了必定只有一个主机给你发来数据。
hanchaoman
2楼-- · 2019-08-17 04:59
我的意思是,现在有多个主机用相同 CAN ID (发送时用的ExtId,IDE、 RTR 相同),这样多主机同时发送数据总线还能正确仲裁吗?总线仲裁不是根据CAN ID仲裁的吗? 我用的是扩展帧CAN ID是29位的
hanchaoman
3楼-- · 2019-08-17 06:45
正点原子 发表于 2017-6-8 17:33
仲裁机制保证了必定只有一个主机给你发来数据。

首先谢谢原子哥的解答,但还有不明啊 :
我的意思是,现在有多个主机用相同 CAN ID (发送时用的ExtId,IDE、 RTR 相同),这样多主机同时发送数据时,总线还能正确仲裁吗?总线仲裁不是根据CAN ID仲裁的吗? 如果CAN ID相同又怎么仲裁呢。我用的是扩展帧CAN ID是29位的
STM32新学习者
4楼-- · 2019-08-17 10:12
 精彩回答 2  元偷偷看……

一周热门 更多>