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.

[参考译文] CCS/TM4C123GH6PM:带有2个 TM4C123GH6PM 的 CAN 总线实现不起作用

Guru**** 2387830 points
Other Parts Discussed in Thread: TM4C123GH6PM, SN65HVD230
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/876414/ccs-tm4c123gh6pm-can-bus-implementation-with-2-tm4c123gh6pm-is-not-working

器件型号:TM4C123GH6PM
主题中讨论的其他器件: DK-TM4C123GSN65HVD230TM4C123

工具/软件:Code Composer Studio

您好!

我使用2个 TM4C123GH6PM 电路板以及 两个电路板的 CAN0和 UART0。 我已经从 DK-TM4C123G 中获取了 CAN 总线示例
电路板示例。 我删除了 LCD 器件、因为我的测试不需要此器件。
我使用具有 IC SN65HVD230的2 CJMCU-30收发器。
我根本没有获得输出。
我已经检查了硬件连接、它们是正确的、代码也是无错误的
正确调试。
我已经更改了 CAN0引脚、但也没有得到
输出。
请帮助我找到解决此问题的方法

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

    您好!

     您能否尝试附加的 CAN_simple.tx.c 示例或与现有示例进行比较? 我假设您具有适当的端接电阻(I.E.  总线两端各一个120欧姆电阻)  这对于长距离应用尤其重要。   

    e2e.ti.com/.../4162.simple_5F00_tx.c

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

    您好!

    您注意到、  

    [报价用户="Deoyani Joshi"]我已检查硬件连接,它们是正确的

    然而、您的"经验/专业知识水平 wrt CAN"尚不清楚-原理图将启用"集团审查"。

    您还会注意到、"没有获得输出。"

    然而、有多个输出-没有吗?   (即 CAN_TX(两种)驻留在 CAN 总线上的差分信号)

    由于有2个 MCU 和2个 CAN XCVRS -有(许多)个可探测的点。    ("测试您的双 MCU 应用的每一端都是值得的!")

    在诊断"发生故障的串行实施"时、示波器电容始终证明是最佳的-您是否监控过(所有潜在)具有示波器的输出?   如果不是通过示波器-如何监控"输出"?

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

    我已经尝试了 simple_tx。 和 simple_Rx 之间的关系。 这与我尝试的示例相同。  

    我没有获得输出。

    我不熟悉此电路板、CAN 总线实现也是我的新功能是否存在任何设置或硬件问题?您能为我提供有关如何检查的建议吗?

    总线的每一端 CAN_H 和 CAN_L 之间都有一个120欧姆的电阻器。

    我正在检查串行终端上的输出(PuTTy)。

    感谢您的回复。

    此致

    Deoyani Joshi

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

    我已经再次尝试 simple_tx 代码、现在 遇到以下错误。 我通过引脚 CONFIG (PE4-CAN0RX、PE5-CAN0TX、PB4-CAN0RX、PB5-CAN0TX、PF0-CAN0RX、 PF3-PE5-CAN0TX)

    "正在发送 msg:0x4d 00 00 00错误-电缆已连接?"

     谢谢、此致

    Deoyani  

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

    您之前报告过:"我已检查硬件连接、它们是正确的。"

    我们要求提供一份展示"您的所有连接"的原理图:

    • MCU1到 CAN Xcvr1
    • CANBus1至 CANBus2 (差分信号侧)
    • MCU2到 CAN Xcvr2

    提供此要求的信息可减少"帮助者"被迫进行的"猜测"。    并让您"额外的眼睛"查看您的硬件连接。   (您之前认为"正确")

    您最近报告收到"错误-电缆已连接?"   这增加了原理图(仍然缺失)的重要性。

    请注意、您之前曾报告过"我正在检查串行终端(PuTTy)上的输出。"   然而、(大部分) CAN Xcvrs 的输出"不太可能"与配置为串行终端的(假定的) PC 兼容。   (PC 几乎肯定会"期望" USB 连接-大多数 CAN Xcvrs 都不提供!)

    您的操作无法解释、导致您的结果从"无输出"移至(现在)"错误-电缆已更正!"   您为实现"这"(第一次)新输出做了哪些工作?

    之前列出的 CAN 信号线的示波器捕获(在每个 MCU 上以及在 CAN 总线上)已(未)提供。   这些特性在对大多数串行总线进行"快速且基于"的远程诊断中至关重要...

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

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

    您好!

    我将向您发送一 份大致原理图 、这些是我与收发器的连接、它们作为 CAN0RX 正确连接到 TM4C123G 的 PE4

    CAN0TX 到 TM4C123G 的 PE5

    3.3V 和 GND 连接

    CANL 连接到另一个收发器 CANL、CANH 连接到另一个收发器 CANH。  

    是否有其他连接?  

    很抱歉,我对它不是很了解。  

    请指导我正确解决此问题

    谢谢、此致

    Deoyani

     

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

    谢谢你。   以下问题仍然不清楚:

    • 您如何以及在何处连接串行终端?
    • 如上所述-您的串行终端被怀疑是 PC 中的应用程序。   是这样吗?
    • 大多数现代 PC 都不再使用 UART -用 USB 端口替换这些 UART。   如前所述- Xcvrs (除非是高度专业化的)可以为 UART (而不是 USB)提供输出。
    • 您的错误"电缆已连接?"来自何处 会出现什么情况?   (即、在"simple_rx 或 simple_tx"中是否显示了该错误?)
    • 您似乎无法访问示波器-使用"示波器电容器"来监控 CAN 总线会更加困难。   您不能借用示波器或将您的实验板带到某所学校-示波器可用的地方?
    • 您是否测量了2条 CAN 总线信号线路(电缆)的连通性?    您还应测试电缆是否短路。
    • 您的第二个 CAN Xcvr 和 MCU 是否连接到单独(不同)的 PC?   如果是- CAN 位置之间的间隔距离是多少?
    • 与往常一样、当通信失败时、最好证明"使用可能的最慢总线速度"。   只有在建立通信后、才能满足"速度需求"。   (已尝试)

    是的、有许多问题-但"无产出"一词太模糊、无法使用。    "如何及在何处测量"无输出"将大有帮助...

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

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

    您好!

    这是一 个 TM4C123G 电路板的 UART0输出、其中加载了 simple_tx.c、另一个电路板中加载了 simple_rx.c、但未显示任何内容。

    谢谢、此致

    Deoyani  

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

    你好  

    在捕获输出时、我已在 代码和板上将 PB4配置为 RX、将 PB5配置为 CAN0的 Tx、(硬件连接)我已将 PE4连接为 Rx、将 PE5连接为 TX、然后我显示了连接的输出。

    连接正确的引脚时   

    PB4 -作为 CAN0RxTM4C123G

     与 Pb5 -CAN0Tx TM4C123G 类似  

     我已在 代码中配置、我正在获取 以下输出

     "错误-电缆已连接?"

    为什么会发生这种情况,我没有得到它…

    谢谢、此致

    Deoyani  

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

    你好  

    在捕获输出时、我已在 代码和板上将 PB4配置为 RX、将 PB5配置为 CAN0的 Tx、(硬件连接)我已将 PE4连接为 Rx、将 PE5连接为 TX、然后我显示了连接的输出。

    连接正确的引脚时   

    PB4 -作为 CAN0RxTM4C123G

     与 Pb5 -CAN0Tx TM4C123G 类似  

     我已在 代码中配置、我正在获取 以下输出

     "错误-电缆已连接?"

    为什么会发生这种情况,我没有得到它…

    谢谢、此致

    Deoyani  

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

    您好!

     如果您看到"ERROR - cable connected?(错误-电缆已连接?)" 打印在终端窗口上、则 CAN 内核检测到错误。 请通过 CANSTS 寄存器了解错误状态、以确定错误原因。 CB1建议、如果您有捕获 CAN 总线的范围、调试您的问题会容易得多。  

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

    您好、Charles、

    如何 从 CANSTS 寄存器了解状态?

    您能不能正确地指导我。

    谢谢、此致

    Deoyani

     

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

    您好!

     请参阅 CANIntHandler() ISR。 它调用 CANIntStatus 来找出中断原因。 此函数将读取 CANSTS 寄存器。 您可以在行中放置一个断点、以找出从调用返回的值、或者只需浏览寄存器窗口。  

    void
    CANIntHandler (void)
    {
    uint32_t ui32Status;
    
    //
    //读取 CAN 中断状态以查找中断原因
    //
    ui32Status = CANIntStatus (CAN0_BASE、CAN_INT_STS_CAUST);
    
    //
    //如果原因是控制器状态中断,则获取状态
    //
    if (ui32Status = CAN_INT_INTID_STATUS) 



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

    您好、Charles、

    谢谢-您通过这个关键(内幕)细节完成了出色的指导海报(以及其他人[尤其是我的小组])。

    员工和我自己都无法找到有关"CAN_INT_STS_CAUS"的信息、因为它未在 API 的 CAN 定义中列出。   然后、我们搜索"pin_map"-再次显示 Out Recognition。   

    深入探究-我们找到了它的描述(API 中的"埋入")-并相信最好通过海报和感兴趣的其他人"分享"关键发现:

    此 API 屏幕盖(如下所示)说明了我们(和其他人)在这种关键识别方面的困难:

    请注意、(此处的所有员工)已"丢失"-直到我们的第三次搜索(在搜索 pin_map.h 和 TM4C123手册失败后)发现这一(完全隐藏) eIntStsReg 参数。   (仅在 API 库中找到。)   由于对该参数的理解至关重要-也许最好是"更明显地呈现它?"   (当然不是您的工作、也不是原因代理-但"隐藏"此类数据不太可能"提升"MCU 销售...)

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

    您好 CB1、

     感谢您的反馈和对 API 函数的演示。 我还在数据表中找到了以下注释、这些注释将为海报提供额外的澄清信息。  

    CANINT 寄存器中的中断标识符 INTID 指示中断原因。 如果不是
    中断挂起、寄存器读为0x0000。 如果 INTID 字段的值与0不同、
    那么中断正暂挂。 如果 CANCTL 寄存器的 IE 位置位、则中断线将连接到
    中断控制器激活。 中断线路保持激活、直到 INTID 域为0、这意味着
    所有中断源都已被清除(中断的原因被复位)、或者直到 IE 被清除、
    禁用 CAN 控制器的中断。


    CANINT 寄存器的 INTID 域指向挂起的最高的报文中断
    中断优先级。 CANCTL 寄存器的 SIE 位用于控制 RXOK、TXOK、
    CANSTS 寄存器中的 LEC 位可能会导致中断。 CANCTL 寄存器中的 EIE 位
    控制 CANSTS 寄存器中 BOFF 和 EWARN 位的改变是否会导致
    中断。 CANCTL 寄存器的 IE 位用于控制 CAN 控制器是否产生中断
    实际上会向中断控制器产生中断。 CANINT 寄存器也会更新
    当 CANCTL 寄存器的 IE 位清零时、中断不会向 CPU 指示。
    CANINT 寄存器中的值0x8000表示由于 CAN 中断挂起
    模块已更新 CANSTS 寄存器、但不一定更改、这表示任一个
    已生成错误或状态中断。 对 CANSTS 寄存器的写访问可以将清零
    该寄存器中的 RXOK、TXOK 和 LEC 位;但是、清除 A 源的唯一方法
    状态中断是读取 CANSTS 寄存器。


    在中断处理期间、可以通过两种方式确定中断源。 第一个是对
    读取 CANINT 寄存器中的 INTID 位来确定挂起的最高优先级中断、
    第二个是读取 CAN 报文中断挂起(CANMSGnINT)寄存器以查看
    所有具有挂起中断的报文对象。


    读取作为中断源的消息的中断服务例程可能会读取
    同时将 CLRINTPND 位置位、即可将报文对象的 INTPND 位清零
    CANIFnCMSK 寄存器中的位。 一旦 INTPND 位被清零、CANINT 寄存器就会自动清零
    包含带有挂起中断的下一个报文对象的报文编号。

    数据表对与 API 匹配的所有错误标志和 LEC 代码进行了完整说明。

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

    您好、Charles、

    这是相当详细的-谢谢... 然而,这种"相互关联的事实阵列"是否几乎肯定地说,"强制使用范围"进行适当的 CAN 分析?    正如海报(已多次)所述、"范围的必要性"-他持续的"限制"(关于范围)迫使所有帮助者付出额外的努力!

    我的小组建议了海报"借入或使用他人的范围"的方法-减去海报的确认。   

    这一 très 的细节很好地说明了 CAN 是一种"认真"的总线、因此要求非常高、并且几乎(及时)确定为"需求范围诊断"。   (敢说、"缺乏经验和/或设备不足"的使用可能会"过度挑战"、并会耗费无经验的帮助者的时间/精力?)

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

    您好 CB1、

     正如我 在2020年2月3日星期一上午8:41 的回复中所提到的、完全同意您的诊断需要范围。   

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

    的确,查尔斯——“有效提及”“对关键范围上限的需求”,可防止“不公平”(近乎滥用)的帮助者。

    通常"有效"要求不仅仅是"一个简单的提及"、甚至"关于"如何获取"所需器件的建议..."