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.

[参考译文] TM4C123AE6PM:CAN 总线、未传输

Guru**** 2763585 points

Other Parts Discussed in Thread: EK-TM4C123GXL, TM4C1290NCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1591042/tm4c123ae6pm-can-bus-not-transmitting

器件型号: TM4C123AE6PM
Thread 中讨论的其他器件: EK-TM4C123GXLTM4C1290NCPDT

在尝试发送时、我没有获得任何输出、也没有获得发送完成中断。  当我首次启动时、CAN 总线 H 和 L 为低电平、未保持在空闲状态、因此我确实收到错误中断。  当总线设置为空闲 (H 和 L 均通过 10K 电阻~2.5 伏至 2.5 伏 P/S) 时、将不传输。  代码如下:

请访问 Transmit.txt 

谢谢、

Doug

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

    我使用 TivaWare 2.1.4.178、因此不存在 TivaWare 2.1.3.156 错误。

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

    更多信息: 初始化后以及 CANMessageSet () 设置之前和之后、CANCTL = 0xE(错误,状态,CAN 中断被启用并设置为正常运行)、CANSTS = 0、CANERR = 0、CANINT = 0。

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

    任何建议,看哪里,事情要尝试?

    谢谢

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

    好的,关于在哪里我可以雇用可以帮助我解决这个问题的人的建议??

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

    “我不知道,我不知道你在胡说什么。“

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

    有人在那里???

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

    此时、我怀疑任何人都会看到或关心这个问题、但我只是想补充一点、在本地环回测试模式下一切都可以正常工作。

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

    磨机的磨粒更多;我可以在测试模式下强制 I/O 处于高和低状态。

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

    在尝试发送消息之前、CAN 状态寄存器为 0、在尝试发送消息后、它仍然为 0,并且由于未发生发送中断,它没有将其归零 — 并且 TxOK 位未设置、指明它没有清除。

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

    在尝试发送 CANTXRQ2 寄存器之前、尝试发送后、该寄存器为 0、表示已请求 Tx 但未完成。  请记住、在环回模式下一切都正常。

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

    尊敬的 Doug:

    对延迟表示抱歉、但您能帮助澄清您与哪个 TCAN 发射器通信吗? 如果它在环回模式下运行良好、我的假设是硬件设置就是问题所在。
    另外,只是在环回模式下仔细检查您是否正确收到了消息?

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

    这是一个 TCAN1472VDRQ1、我要查找直接从 MPU 发出的信号、而不是 CAN 总线本身。

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

    当我可以使用 CAN 测试模式来使信号变为高电平和低电平时、我看不出这是如何成为硬件问题。

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

    是的、在环回模式下、我正确收到了消息。

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

    尊敬的 Doug:

    您能否检查在环回模式下是否发生发送中断?  

    有关测试设置以及您在发送时看到的寄存器值的更多详细信息也会有所帮助。

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

    我犯了一个错误、然后单击“这解决了我的问题“、请您撤消该操作。

    是、发送和接收到的中断在环回模式下工作正常。

    Re “什么寄存器值“可以更选择性地选择您希望我跟踪哪些寄存器?  我在任何传输尝试之前拥有的内容:

    CANSTS、状态: 0、 CANIF1CRQ: 0x20、 CANIFMCTL: 0  、CANTXRQ1:0、  CANTXRQ2: 0

    尝试传输后:

    CANSTS: 0、 CANIF1CRQ: 0x11、 CANIFMCTL: 0x988  、CANTXRQ1:0、CANTXRQ2:  1 (消息对象 17)。

    对于环回测试和正常运行、代码是相同的。  我可以向您发送我的代码和/或原理图。

    谢谢、Doug

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

    MPU 上的 CAN Rx 信号预计为高电平还是低电平以供器件发送 — 即,它是否检测到 CAN 总线已开启并处于空闲状态?

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

    如果很简单、发送代码和原理图会很有用。

    如果它在环回模式下工作、我很好奇 GPIO 配置是否存在问题。 您能否发送有关 GPIOAFSEL 和 GPIOPCTL 寄存器的信息? 只是为了确保两者都映射以配置 CANRX 和 TX 引脚。

    我将仔细检查您发送的寄存器值、确保其符合预期。

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

    端口 B: GPIOAFSEL = 0x73、GPIOPCTL = 0x4883311

    它的设置包括:

      GPIOPinTypeCAN (GPIO_PORTB_BASE、PB_CAN2Rx_BIT | PB_CAN2Tx_BIT);
      GPIOPinConfigure (GPIO_PB4_CAN0RX);
      GPIOPinConfigure (GPIO_PB5_CAN0TX);

    我认为、由于我将 CAN 置于测试模式并设置 CANTST 以成功将引脚驱动为低电平和高电平、因此必须正确配置这些引脚。

     e2e.ti.com/.../Backlight-v2.pdf

    e2e.ti.com/.../Code-for-CAN.zip

    原理图上的注释:未安装逆变器 U13 和 U16、焊接跳线 SJ1、SJ6、SJ7 和 SJ10 已跳线。

    谢谢、Doug

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

    BTW、在 monitor.cc 中、我正在通过 SpecialTest() 进行测试、它位于代码的“T"部分“部分。

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

    为了确保在执行此操作时、您需要先运行 CANTest 功能? 执行环回模式测试后、需要清除 CANTEST 寄存器。

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

    您能否发送一个现成的命令列表、因为这似乎集成到 UART 终端中、我想确保以前的非寄存器配置与传输有关

    原理图看起来也不错

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

    你(们)好  运行 CANTest () 后、电路板始终复位。  在什么之前、不确定您的意思是“手前使用的命令“?  另外、“这似乎集成到了 UART 终端中“、这意味着什么?  使用 2 个 UART、一个用于调试终端、一个用于蓝牙收发器。  我不知道该怎么做,也不知道该怎么做。

    e2e.ti.com/.../Backlight-SW-121125.zip

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

    可能是我在某种程度上在 MPU 中使 CAM 电路的一部分崩溃了吗?

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

    我在不同的电路板上运行测试、结果相同、因此这是一个不错的 MPU。  Erik、您还在吗?

    谢谢、Doug

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

    磨坊更受欢迎 — 我也没有收到任何外部生成的 CAN 消息。

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

    再次,这个问题没有得到解决!

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

    尊敬的 Doug:

    很抱歉、我试图了解您的项目流程是如何工作的。  从代码库来看、除了使 CAN IP 初始化之外、似乎还有许多其他任务可能会导致一些问题。

    在您这边,您是否能够测试运行 Cantest () 功能,然后在“主“功能中派送一个?  

    您的意思是“我也没有收到任何外部生成的 CAN 消息“。

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

    我可以尝试在没有调度员的情况下运行 Cantest()(好主意)。  Re 您的最后一个问题是、我设置了一个 Pibiger PU2CANF-C、设置为使用精通的 CAN 发送 CAN 消息、并且没有产生中断。

    Re “我的项目流“,调度员只是“一个大的进程循环“,但它不是依次调用所有进程来查看它们是否需要运行,它是一个中心位置,只有当它们有事情要做时才运行它们,所以我知道何时可以让 CPU 进入睡眠状态。  当发生需要在 ISR 外部处理的中断时,它会向任务发送消息(通过 ISR_ISR() Send_Message 唤醒调度器),或者向状态机发送事件(通过 ISR_ISR() Send_Event — 它使用 ISR_ISR() 向事件调度器发送消息),从而使运行序列化,并且处理消息同步(大大降低出现严重竞争条件和 Send_Message 段的可能性)。

    我会让你知道事情是如何进行的。

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

    我将 specialTest()(monitor.cc 中的 cdt1) 中的代码复制到了在 main() 中调用 Dispatch () 之前的右侧、但没有运气。

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

    您好、Erik、

    我正在创建最小代码来测试 CAN 总线传输、我有一个问题:我正在使用 TivaWare CANBitRateSet () 函数设置 simple_tx.c 示例中使用的 CAN 时钟速率、但在外设驱动程序库中、该示例使用 SetCANBitTiming ()、两者是否都有效?

    BTW、CANSetBitTiming () 在 tCANBitClkParams 文档中提到、在第 6.2.1 节“详细说明“中说明、必须使用它来设置位时序、但未在第 6.2 节“API 函数“中列出。

    TivaWare 2.1.4.178

    谢谢、Doug

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

    好的,我编写了附加的代码来消除多余的函数,在 main() 中我调用 ConfigMPU() 、然后是 CanTest() 。   

    在调用 CANMessageSet () 之前、CAN0TXRQ 寄存器是 0x0、它正好在 0x1 之后 — 所以消息已准备好发送,经过延迟后仍然是 0x1、所以它永远不会被发送。

    随附代码:

    谢谢、Doug

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

    嗯、它不喜欢.cc 文件、我会尝试附加一个 zip file.e2e.ti.com/.../Can-Test.zip

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

    好的、遵循 ChatGPT 建议的、更新的代码:

    e2e.ti.com/.../CAN-Test-2.zip

    运行此命令可得到:

    消息尚未设置

      CAN0TXRQ1 = 0x0、CANIF1CTL = 0x1

      CAN0ERR  = 0x0、CAN0STS  = 0x0

    已调用 CANMessageSet()

      CAN0TXRQ1 = 0x1、CANIF1CTL = 0x1

      CAN0ERR  = 0x0、CAN0STS  = 0x0

    测量输出阻抗

      CAN0TXRQ1 = 0x1、CANIF1CTL = 0x1

      CAN0ERR  = 0x0、CAN0STS  = 0x0

    可悲的是、它看起来不像点亮了为什么变速器不启动。

    叹气... Doug

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

    我要从已经过测试的 SDK 示例开始、并正确配置 CAN 模块。 您是否尝试过 SDK 中的“simple_tx"示“示例? 这将有助于缩小问题的范围。 它还将相同的引脚用于 CAN、但您可能需要更改 UART 引脚。

    此外、您使用的 TIVAware 似乎已经过时、您是否可以更新到 2.2.0、CAN 模块的不同版本之间可能已修复。


    我相信 CANBitTimingSet 和 CANBitRateSet 都使用  

    您是否可以在设置引脚类型之前尝试配置引脚(类似于 SDK 示例)? 以下供参考:

    GPIOPinConfigure (GPIO_PB4_CAN0RX);

    GPIOPinConfigure (GPIO_PB5_CAN0TX);
    GPIOPinTypeCAN  (GPIO_PORTB_BASE、PB_CAN2Rx_BIT  | PB_CAN2Tx_BIT );  // CAN I/O
    对于设置消息时的 CAN 中断、您确实在消息上配置了标志以实现中断、但不在器件上启用特定的中断。 尝试使用此函数:
    CANIntEnable (CAN0_BASE、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
    这也有助于调试引发的任何错误或状态更改。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我要从已经过测试的 SDK 示例开始、并正确配置 CAN 模块。 您是否尝试过 SDK 中的“simple_tx"示“示例? 这将有助于缩小问题的范围。 它还将相同的引脚用于 CAN、但您可能需要更改 UART 引脚。

    此外、您使用的 TIVAware 似乎已经过时、您是否可以更新到 2.2.0、CAN 模块的不同版本之间可能已修复。


    我相信 CANBitTimingSet 和 CANBitRateSet 都使用  

    您是否可以在设置引脚类型之前尝试配置引脚(类似于 SDK 示例)? 以下供参考:

    GPIOPinConfigure (GPIO_PB4_CAN0RX);

    GPIOPinConfigure (GPIO_PB5_CAN0TX);
    GPIOPinTypeCAN  (GPIO_PORTB_BASE、PB_CAN2Rx_BIT  | PB_CAN2Tx_BIT );  // CAN I/O
    对于设置消息时的 CAN 中断、您确实在消息上配置了标志以实现中断、但不在器件上启用特定的中断。 尝试使用此函数:
    CANIntEnable (CAN0_BASE、CAN_INT_MASTER | CAN_INT_ERROR | CAN_INT_STATUS);
    这也有助于调试引发的任何错误或状态更改。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Erik、

    我已经尝试了“simple_tx"代码“代码(如果你在本线程中的前面看,我会提到这一点并下载代码)、main() 循环会运行、但中断永远不会发生。

    升级到 TivaWare 2.2.0.295 后未能解决问题。

    此致、Doug

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

    尊敬的 Doug:

    我向您发送了一封电子邮件以寻求进一步帮助。 如果愿意、我们可以使用该线程。

    在前面的线程中、您以 simple_tx 为例。 如果 simple_tx 无法正常工作、我无法从原理图中分辨出其他硬件问题。 如果运行 simple_tx 示例导致您出现问题、我会假设这是硬件问题。

    对于运行 simple_tx 示例、如果您计划不使用 UART 功能来调试器件、请确保删除 initconsole。

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

    最新状态: 我聘请了 Elco Solutions 来查看我的硬件和软件、他们向我发送了他们在 TM4C129 开发板上成功运行的 simple_tx 代码 、几乎就是我已经运行的 simple_tx 代码 — 他们添加了“ CANRetrySet (CAN0_BASE、disable_can_Auto_retransmit);“、这没有任何区别。  我只能想象 — 由于 CAN 接口的硬件部分非常简单、MPU 本身必须有缺陷。  因此,我订购了一些新的 MPU,并将它们安装在我的两个单位,看看会发生什么。

    我还订购了几个 TM4C123G LaunchPad、并将对它们运行 CAN 测试。

    我会告诉您所找到的内容。

    此致、Doug

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

    好的、新数据。  我使用了 TM4C123G LaunchPad 板和 Adafruit “CAN Pal“ CAN 总线接口、带有 simple_tx 示例、但仍然没有传输!!  这是从 TM4C129 开发板改编且适应 LaunchPad 的代码。

    我在 TivaWare examples/boards/ek-tm4c123gxl 中看到没有 CAN 示例、是否有任何 CAN 示例用于 TM4C123 器件上?

    e2e.ti.com/.../main.c.zip

    Doug

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

    有人需要看看这个网站的操作;我的最后一篇文章从来没有通过。

    最新消息、TM4C123G LaunchPad 出现同样的问题!  随附代码。  1) 任何人都能给我展示使 CAN 接口在 Tm4C123 设备上工作的代码吗?  任何人都可以在 TM4C123G Launchpad 上工作吗?  您不需要 CAN 总线驱动器、只需使 CAN Tx 引脚尝试发送消息。

    e2e.ti.com/.../main.c.zip

    谢谢、Doug

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

    P.S.、拥有最长的 E2E 主题是否可以获得任何积分?

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

    好的、另一个数据点。  我将附加的代码添加到我的 TM4C1290NCPDT 项目板 — 在跟踪 Can_Test () 时、它进入 CANMessageSet (...);它返回到 while () 延迟循环、CPU 故障返回到 FaultISR ()。  希望我刚刚在软件中犯了一个愚蠢的错误,但我看不到它。

    谢谢、Doug

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

    P.S.、我将栈和堆大小加倍以确保这不是问题。