This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TM4C123AE6PM:未接收到环回 CAN 数据。

Guru**** 2668255 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1595361/tm4c123ae6pm-loopback-can-data-not-being-received

器件型号: TM4C123AE6PM

这可能很简单,但我不能罚款.  我在环回/测试模式下设置 CAN-0 并发送消息、即成功发送和接收消息、但是指向接收到的数据的指针为 0、而不是 RAM 中的正确地址。  编程如下:

U8 TxData[8]={0x01、0x23、0x45、0x67、0x89、 0xAB、0xCD、0xEF };

U8 CAN0Data17[8];       //发送数据。
tCANMsgObject Can0MsgObj17;
U8 CAN0Data18[8];       //接收数据。
tCANMsgObject Can0MsgObj18;
   
void main (void){

  SysCtlPeripheralEnable (SysCtl_Periph_GPIOB);
  SysCtlPeripheralEnable (SYSCTL_PERIPH_CAN0);  
  (这里有延迟)
  GPIOPinTypeCAN (GPIO_PORTB_BASE、PB_CAN2Rx_BIT | PB_CAN2Tx_BIT);
  GPIOPinConfigure (GPIO_PB4_CAN0RX);
  GPIOPinConfigure (GPIO_PB5_CAN0TX);

  CANInit (CAN0_BASE);
  CANBitRateSet (CAN0_BASE、GetClkSpeed ()、500000);
  CANIntRegister (CAN0_BASE、CAN0_ISR);
  CANIntEnable (CAN0_BASE、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
  IntEnable (INT_CAN0);
  CANEnable (CAN0_BASE);

  HWREG (CAN0_BASE + CAN_O_CTL)|= CAN_CTL_TEST;
  HWREG (CAN0_BASE + CAN_O_TST)|= CAN_TST_LBACK;

  U8 CAN0Data18[8];
  Can0MsgObj18.ui32MsgID  = 0;  //接收消息对象。
  Can0MsgObj18.ui32MsgIDMask = 0;
  CAN0MsgObj18.ui32Flags  = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER;
  Can0MsgObj18.ui32MsgLen  = 8;
  CANMessageSet (CAN0_BASE、MsgObj18、&Can0MsgObj18、MSG_OBJ_TYPE_RX);

  U8 CAN0Data17[8];
  Memcpy (Can0Data17、TxData、8);
  Can0MsgObj17.ui32MsgID  = 0x100;  //发送消息对象。
  Can0MsgObj17.ui32MsgIDMask = 0x0;
  CAN0MsgObj17.ui32Flags  = MSG_OBJ_TX_INT_ENABLE;
  Can0MsgObj17.ui32MsgLen  = 8;
  Can0MsgObj17.pui8MsgData = Can0Data17;
  CANMessageSet (CAN0_BASE、MsgObj17、&Can0MsgObj17、MSG_OBJ_TYPE_TX);
}


void CAN0_ISR (void){

  U8 状态= CAN0_STS_R & 0x000000FF;    // Get Status。
  CAN0_STS_R = 0;                //重置状态。
  U32、 = CAN0_INT_R;           //哪个消息对象。
  其中=((why-1)& 0x1F)+ 1;

  //在此处处理状态。

  开关(哪个){

    案例 17:
      //传输成功。
      休息;

    案例 18:
      CANMessageGet (CAN0_BASE、MsgObj18、&Can0MsgObj18、false);

      //此处:
      // Can0MsgObj18.ui32MsgID 为 100、
      // Can0MsgObj18.ui32MsgLen 为 8、
      //但 Can0MsgObj18.pui8MsgData 为 0、而不是 Can0Data17。

}

 

谢谢、Doug

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在切换语句末尾未显示“}“。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是的,愚蠢的错误,忘记将指针添加到接收消息对象中的数据。