CAN 回环模式正常,异常模式失败。

  1. osStatus_t osStatus = osMessageQueuePut(osMessageQueueId_RACKRX_TxMsg, &CanTxMsgPtr, 0, 0);
    把数据放到队列中

  2. if(osOK == osMessageQueueGet(osMessageQueueId_RACKRX_TxMsg,(void **)&CanTxMsgPtr,NULL,osWaitForever))
    从队列中取出数据

  3. HAL_CAN_AddTxMessage(&RACKCAN_Handle,&(CanTxMsgPtr->TxHeader),CanTxMsgPtr->MsgBuf,&TxMailbox);
    库函数发送数据

  4. if (((tsr & CAN_TSR_TME0) != 0U) || ((tsr & CAN_TSR_TME1) != 0U) || ((tsr & CAN_TSR_TME2) != 0U))
    发送邮箱一直是满的,进不到if(osOK == osMessageQueueGet(osMessageQueueId_RACKRX_RxMsg,(void *)&LocalMsgType,NULL,osWaitForever))

解决方法:
将CAN 配置为回环模式后,可以正常进入到if(osOK == osMessageQueueGet(osMessageQueueId_RACKRX_RxMsg,(void *)&LocalMsgType,NULL,osWaitForever))

  1. 在这篇文章下有人提到can的收发器的供电有可能会有这个问题,于是将板子供电提高到48v就可以正常发数据。(实际板子是48v供电,异常的时候是24v供电)
    https://shequ.stmicroelectronics.cn/thread-623223-1-1.html
posted @ 2024-05-27 18:02  天天求进步  阅读(180)  评论(0)    收藏  举报