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.

[参考译文] EK-TM4C123GXL:通过 CAN 总线读取远程帧

Guru**** 2457590 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/643158/ek-tm4c123gxl-read-a-remote-frame-via-can-bus

器件型号:EK-TM4C123GXL

您好!

我的系统是:

LaunchPad TM4C123G

MCP2562

只有在 RTR 消息请求时、才会发送具有 CAN 总线消息的器件

我不清楚如何读取远程消息。

如何使用以下定义?

MSG_OBJ_REMOT_FRAME
MSG_OBJ_TYPE_TX_REMOTE
MSG_OBJ_TYPE_RX_REMOTE

我阅读了外设驱动程序库的第88页、但我不清楚。

是否有提示?

提前感谢!

这是我的代码:

//使用 ID 和掩码0接收包含任何 CAN ID
g_sCAN0RxMessage.ui32MsgID 的消息 =0;//= 0x2c4;
G_sCAN0RxMessage.ui32MsgIDMask =0;//= 0x7ff;
G_sCAN0RxMessage.ui32Flags = MSG_OBJ_RX_INT_ENABLE | MSG_OBJ_USE_ID_FILTER | MSG_OBJ_REMOT_FRAME;
G_sCAN0RxMessage.ui32MsgLen = 8;//最多允许8个字节


//设置 msg 对象
msgData2=0;
G_sCAN0TxMessage.ui32MsgID=加速计_XYZ;
G_sCAN0TxMessage.ui32MsgIDMask= 0;
G_sCAN0TxMessage.ui32Flags= MSG_OBJ_TX_INT_ENABLE | MSG_OBJ_REMOTE_FRAME;//
G_sCAN0TxMessage.ui32MsgLen= 0;// sizeof (msgDataPtr2);
//g_sCAN0TxMessage.pui8MsgData= msgDataPtr2;

//
//现在将消息对象加载到 CAN 外设中。 加载后
// CAN 将在总线上接收任何消息,并将发生中断。
//使用消息对象 RXOBJECT 接收消息(这不是
//与 CAN ID 相同,在本例中可以是任何值)。
//
CANMessageSet (CAN0_BASE、RXOBJECT、&g_sCAN0RxMessage、MSG_OBJ_TYPE_RX);


while (1)
{

CANMessageSet (CAN0_BASE、TXOBJECT、&g_sCAN0TxMessage、MSG_OBJ_TYPE_TX_REMOTE);//作为消息对象1发送

延迟(100);//等待100ms

if (g_ui32勘误标志!= 0)
{//检查错误
//UARTprintf ("CAN 总线错误\n");
CANErrorHandler();
}
//UARTprintf ("Hola\n");

if (g_bRXFlag)
{//发生 Rx 中断
UARTprintf ("Hola---- 21\n");

G_sCAN0RxMessage.pui8MsgData = msgData;//设置指向 Rx 缓冲区的指针
CANMessageGet (CAN0_BASE、RXOBJECT、&g_sCAN0RxMessage、MSG_OBJ_TYPE_RX_REMOTE);//从 CAN 外设读取 CAN 消息对象 RXOBJECT

G_bRXFlag = 0;//清除 Rx 标志

if (g_sCAN0RxMessage.ui32Flags & MSG_OBJ_DATA_LOST)
{//检查消息标志以查找任何丢失的消息
UARTprintf ("检测到 CAN 消息丢失\n");
}
}

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

    要生成远程请求(RTR)、请配置 CAN 消息 MSG_OBJ_TYPE_TX_REMOTE。 然后等待响应以提供新数据。

    CANMessageSet (CAN0_BASE、1、&sMsgObjectRx、MSG_OBJ_TYPE_TX_REMOTE);
    //
    //等待新数据可用。
    //
    while ((CANStatusGet (CAN0_BASE、CAN_STS_NEWDAT)& 1)= 0)
    {
    //
    //从消息对象中读取消息。
    //
    CANMessageGet (CAN0_BASE、1、&sMsgObjectRx、TRUE);
    }
    //
    //处理 sMsgObjectRx.pucMsgData 中的新数据。
    //
    

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

    感谢您的回答

    标记是正确的?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bob 的回应很好,这应该是一种样子。