-
osStatus_t osStatus = osMessageQueuePut(osMessageQueueId_RACKRX_TxMsg, &CanTxMsgPtr, 0, 0);
把数据放到队列中 -
if(osOK == osMessageQueueGet(osMessageQueueId_RACKRX_TxMsg,(void **)&CanTxMsgPtr,NULL,osWaitForever))
从队列中取出数据 -
HAL_CAN_AddTxMessage(&RACKCAN_Handle,&(CanTxMsgPtr->TxHeader),CanTxMsgPtr->MsgBuf,&TxMailbox);
库函数发送数据 -
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))
- 在这篇文章下有人提到can的收发器的供电有可能会有这个问题,于是将板子供电提高到48v就可以正常发数据。(实际板子是48v供电,异常的时候是24v供电)
https://shequ.stmicroelectronics.cn/thread-623223-1-1.html