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.

[参考译文] LAUNCHXL-F28P65X:两个 F28P65X LaunchPad 之间的 CAN 通信问题

Guru**** 2463330 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1499121/launchxl-f28p65x-can-communication-issue-between-two-f28p65x-launch-pads

器件型号:LAUNCHXL-F28P65X

工具/软件:

您好、

我正要在两个 f28p65x LaunchPad 之间进行通信。我采用 can_ex5_transmit_receive 示例、然后在 调试模式下刷写一个板中的 Rx 和另一个板中的 TX 当 我尝试发送数据时、它将进入中断函数的无限循环(使用打印检查此情况)。它将进入第一个(如果情况为-> if (status = can_int0id_status)、它添加了以下引用函数  

__中断无效
canaISR (void)

uint32_t 状态;

//
//读取 CAN-B 中断状态以查找中断原因
//
status = can_getInterruptCause (cana_base);

printf ("can_getInterruptCause =%lu\n"、status);

//
//如果原因是控制器状态中断、则获取状态
//
IF (STATUS == CAN_INT_INT0ID_STATUS)

//
//读取控制器状态。 这将返回状态字段
//可以指示各种错误的错误位。 错误处理
//为简单起见、此示例中未执行。 请参阅
// API 文档、了解有关错误状态位的详细信息。
//读取此状态的行为将清除中断。
//
status = CAN_getStatus (Cana_base);

printf ("status =%lu \n"、status);

//
//检查是否发生错误。
//
ifdef 传输
if (((status &~(CAN_STATUS_TXOK))!= CAN_STATUS_LEC_MSK)&&
((status &~(CAN_STATUS_TXOK)!= CAN_STATUS_LEC_NONE)))
#else
if (((status &~(CAN_STATUS_RXOK))!= CAN_STATUS_LEC_MSK)&&
((status &~(CAN_STATUS_RXOK)!= CAN_STATUS_LEC_NONE)))
#endif

//
//设置一个标志以指示可能发生了一些错误。
//
errorFlag = 1;   
}
}

硬件连接:  

JP9在两个电路板上均短接、CAN_H 短接至 CAN_H、CAN_L 短接至 CAN_L、GND 短接至 GND  


注意:can_getInterruptCause = 32768、 status = 32768此打印稿 将 连续打印


请让我知道我在这里犯了什么错误

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

    嗨、Bala、

    感谢您就您的问题与我们联系。 我看不到您提供的代码中有任何明显的内容。 您能否为该工程提供.syscfg 文件、以便我们查看配置? 两个器件是否都使用 CANA 实例?

    是否可以探测 CAN_H/CAN_L 和 CAN_RX/CAN_TX 线路、以确保器件之间发生正确的物理层信令?

    TI 提供了以下 应用手册、请查看此信息并在调试过程中应用。

    调试控制器局域网(CAN)物理层 的基础知识- https://www.ti.com/lit/slyt529

    此致、

    Zackary Fleenor