yyth 发表于 2018-12-24 11:31:32

CAN 每次接收都是硬件错误

CAN 接收,每次都是到红色语句地方,在往下一步就会硬件错误,我看了寄存器,接收的数据是对的,有什么解决的方法没,是我的接收方式不对么?
static HAL_StatusTypeDef CAN_Receive_IT(CAN_HandleTypeDef* hcan, uint8_t FIFONumber)
{
uint32_t tmp1 = 0U;
CanRxMsgTypeDef* pRxMsg = NULL;
      
      /* Set RxMsg pointer */
if(FIFONumber == CAN_FIFO0)
{
    pRxMsg = hcan->pRxMsg;
}
else /* FIFONumber == CAN_FIFO1 */
{
    pRxMsg = hcan->pRx1Msg;
}

/* Get the Id */
pRxMsg->IDE = (uint8_t)0x04U & ((uint8_t)(hcan->Instance->sFIFOMailBox.RIR));
if (pRxMsg->IDE == CAN_ID_STD)
{
   // pRxMsg->StdId = 0x000007FFU & (hcan->Instance->sFIFOMailBox.RIR >> 21U);
                pRxMsg->StdId = 0x000007FFU & (pRxMsg->IDE >> 21U);
}
else
{
   // pRxMsg->ExtId = 0x1FFFFFFFU & (hcan->Instance->sFIFOMailBox.RIR >> 3U);
                pRxMsg->ExtId = 0x000007FFU & (pRxMsg->IDE >> 3U);
}

发表于 2018-12-24 11:50:47

楼主,看一下pRxMsg是不是一个空指针?确定一下前面的操作是否给pRxMsg赋值了正确的指针。

watershade 发表于 2018-12-24 13:24:02

你先用loop模式试一下

xiaoyaoxiaoyao 发表于 2020-2-1 22:22:44

楼主问题的解决方法就参考这里http://blog.csdn.net/xiaoyaofriend/article/details/104138618,其实二楼说的很对。
页: [1]
查看完整版本: CAN 每次接收都是硬件错误