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.

[参考译文] TMS570LC4357:无法在 Hercules Launchpad 上工作

Guru**** 2442090 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/622189/tms570lc4357-can-not-working-on-hercules-launchpad

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

我一直在尝试在我的 Hercules Launchpad 板上设置 CAN、但我没有成功。 我学习 了本教程 ,但没有成功。 您可以在下面看到我的所有 HALCOGEN 配置和代码。

uint8_t txtFailedMessage[]={"发送 CAN 消息失败:"};
uint8_t txtReceivedMessage[]={"\n 刚刚接收到消息\n"};

void CAN_init (void){
uint8_t txtCanInit[]={"初始化 CAN"};
sciDisplayText (sciREGx、txtCanInit、strlen (((char*) txtCanInit));
canInit();
}

void CAN_SEND (uint8_t *消息){
if (canTransmit (canREG1、canMESSAGE_BOX1、message)= 0){
sciDisplayText (sciREGx、txtFailedMessage、strlen ((char*) txtFailedMessage));
while (1){
;
}
}否则{
sciDisplayText (sciREGx、message、strlen ((char*) message));
}
}

void canMessageNotification (canBASE-t *节点、uint32 MessageBox){
sciDisplayText (sciREGx、txtReceivedMessage、strlen (((char*) txtReceivedMessage));
return;
}

void canStatusChangeNotification (canbase_t *节点、uint32通知){
return;
}

void canErrorNotification (canBASE-t *节点、uint32通知){
返回;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您声明了三个通知函数;您是否从 notification.c 中删除了这三个函数的空白/空白通知函数?
    您是否为 CAN 中断设置了 VIM (请参阅 Example_CanIntCommunication 示例)?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Neil、

    我尝试删除通知功能以测试 CAN 消息的传输、但这些消息不起作用。 我还启用了所有 VIM CAN 高电平中断。

    你有其他建议吗?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 sys_main.c 中创建/放置通知函数时、需要从 notification.c 中删除占位符函数 既然你已经这样做了、我建议你后退一步并确认这些事情。

    您所拥有的代码看起来至少支持一些基本操作。 TX 将创建一个 CAN 帧。 那么、您有哪种 CAN 网络呢? 是否有您可以使用的 USB CAN 记录器? 我看不到您在哪里调用 CAN_Init 和 CAN_Send。 是否在 TX 之前设置 CAN ID?

    您可能还有一个与您的 Launchpad 器件直接匹配的 Launchpad HalCoGen 项目目标。 最好从与您的 Launchpad 类型匹配的 HalCoGen 目标开始。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Neil、

    我将 Hercule MCU 连接到一个收发器、该收发器直接连接到可在多种不同 CAN 设置下工作的 USB 转 CAN 转换器。

    下面的代码中有一些其他部分调用 init 和 transmit:

    void test_main (uint8_t * macAddress)
    {
    //初始化串行调试行
    sciInit();
    
    //启用周期性中断
    initRTIInterrupts();
    
    IntMasterIRQEnable();
    _enable_FIQ ();
    _enable_IRQ_interrupt_();
    _enable_interrupt_();
    
    printStartMessage();
    
    CAN_init();
    
    while (1)
    {
    CAN_SEND ("1234567");
    int i = 0;
    while (i!= 1000000){
    i++;
    };
    }
    } 

    此外、对于我的特定版本的 Hercules MCU、没有名为 CAN_Send 的功能、也没有需要在代码中设置 ID (我在 HALCOGEN 中执行此操作)。

    此外、我使用的设置基于与我的 LaunchPad 器件匹配的项目目标。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们将讨论几个更基本的问题。
    是否确定 CAN 高电平/ CAN 低电平导线设置正确?
    您使用的通信速度是多少? USB 适配器是否设置了匹配值?

    有时、信号示波器对于查看通信线路上发生的情况非常有用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我确定接线正确。 我已经检查并重新检查了多次、并尝试将两个配置都放在安全的一侧。
    我使用的速度为500k、并且已针对电路板和 USB 适配器正确设置。
    我还使用了示波器来查看正在发生的情况、并且从我看到的情况来看、没有来自 Hercules MCU 的任何信号。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在 HalCoGen 中、当您选择项目时。 您应该会看到子菜单选项[General](常规)和[Driver Enable](驱动程序启用)。 在驱动程序启用中、是否已选中/选中[启用 CAN1驱动程序]?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在 HALCOGEN 上选择了所有必需的选项。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否尝试加载 LaunchPad 演示程序并能够在您的通信测试夹具网络上看到 CAN 帧?

    您可以通过移除并重新接通电路板电源来尝试下电上电。 此外、我建议您在靠近电路板连接器的 CAN-H 和 CAN-L 之间使用一个120欧姆的端接电阻器。

    我猜测、但如果这两件事没有帮助、那么我会怀疑收发器有什么问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Yoesif、

    您是否能够从 LP 在 CAN 引脚上看到任何输出? 至少当您从外部测试工具向 MCU 发送消息时、您应该能够看到收发器 MCU 侧的信号发生一些变化。

    您可能还需要检查 CAN 错误状态寄存器中是否存在任何总线错误条件、并仔细检查 CAN 总线上每个节点的端接电阻是否正确。