请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号: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");
}
}