工具/软件:Code Composer Studio
大家好
我正在尝试与 CANbus 通信我的两个卡。 我自己设计了卡、包括 CAN 收发器、我使用 f28m35h52作为处理器、两个卡都是。 我无法将卡与所附的代码进行通信。 您认为我的代码有问题还是由硬件问题引起?e2e.ti.com/.../canbus.txt
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.
工具/软件:Code Composer Studio
大家好
我正在尝试与 CANbus 通信我的两个卡。 我自己设计了卡、包括 CAN 收发器、我使用 f28m35h52作为处理器、两个卡都是。 我无法将卡与所附的代码进行通信。 您认为我的代码有问题还是由硬件问题引起?e2e.ti.com/.../canbus.txt
在论坛上、我们无法支持调试您的代码。 请下载我的应用报告 http://www.ti.com/lit/sprace5 。 它有许多经过测试的示例。 我还敦促您查看提供的调试提示。 请注意、app.note 示例是为 TMS320F28379器件编写的。 但是、只要您处理 SYSCLKOUT 速度的变化以及 CANBTR 寄存器保证的结果变化、它们就可以轻松地用于任何具有 DCAN 的器件。
您是否阅读了我的 app.report 中的调试检查清单?
请将波形连接到接收器的 CANTX 和 CAN RX 引脚。 我需要清楚地显示在 CANRX 引脚上接收到的数据以及接收器发出的 ACK 信号。 请参阅我的 app.report 中的图4。 您的波形应该与此类似。
您可能会发现以下帖子对您有所帮助: https://e2e.ti.com/blogs_/b/industrial_strength/archive/2015/06/04/what-do-can-bus-signals-look-like
CanMessageGet ()函数中的问题。
代码未 进入"if (usMsgCtrl & CAN_IF2_MCTL_NEWDAT)" 条件。 它跳过了其他地方,ı 无法解决它。
if (usMsgCtrl & CAN_IF2_MCTL_NEWDAT)
{
//获取需要读取的数据量。
pMsgObject->ulMsgLen =(usMsgCtrl & CAN_IF2_MCTL_DLC_M);
//不要读取远程帧的任何数据,中没有任何有效的数据
//该缓冲区。
if ((pMsgObject->ulFlags & MSG_OBJ_REMOTE_FRAME)=0)
{
//从 CAN 寄存器中读出数据。
CANDataRegRead (pMsgObject->pucMsgData、
(unsigned long *)(ulBase + CAN_O_IF2_DATA)、
pMsgObject->ulMsgLen);
}
//现在清除新的数据标志。
HWREG (ulBase + CAN_O_IF2_CMD + 2)= CAN_IF2_CMD_TXRQSTNDAT >> 16;
//将报文对象传输到由指定的报文对象
// ulObjID。
HWREGH (ulBase + CAN_O_IF2_CMD)= ulObjID 和 CAN_IF2_CMD_MSGNUM_M;
//等待忙位清零
while (HWREG (ulBase + CAN_O_IF2_CMD)和 CAN_IF2_CMD_BUSY)
{
}
//指示此消息中有新数据。
pMsgObject->ulFlags |= MSG_OBJ_NEW_DATA;
}
其他
{
//除了 MSG_OBJ_NEW_DATA 未设置的数据量之外
//如果没有可用,则需要设置为零。
pMsgObject->ulMsgLen = 0;
}