测试 CAN1,CAN2互相发送数据,分时发的情况,两者接收都正常。
CAN1发送ID=0x550330的报文
CAN2发送ID=0x330330的报文
同时发,不论先调用CAN1发送还是先调用CAN2发送,CAN1接收正常,CAN2接收不到。监控可以看到CAN1仲裁失败。
ID值交换发送,变成CAN2仲裁失败,CAN1接收不到数据。
根据CAN标准,仲裁失败的节点会自动重发报文,但这个似乎没有重发。
测试的报文发送间隔为1S,寄存器MCR的NART位是0(自动重发模式)。
if(CAN1->TSR & CAN_TSR_TME)
HAL_CAN_Transmit(&hcan1, 0);
if(CAN2->TSR & CAN_TSR_TME)
HAL_CAN_Transmit(&hcan2, 0);
这个问题原因在哪里? 求大神指点。
|