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.

[参考译文] TM4C123BH6PM:丢失 CAN 按摩对象(2)

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1019079/tm4c123bh6pm-lost-can-massage-object-2

器件型号:TM4C123BH6PM
主题中讨论的其他器件:DK-TM4C123G

大家好、

客户提供了使用 Tiva DK-TM4C123G 重新生产的项目。对于以下 E2E 线程、我连接了它。

请您对此进行调查吗?

原始线程已锁定。 我创建一个新的。

TM4C123BH6PM:丢失 CAN 按摩物体

https://e2e.ti.com/support/microcontrollers/other/f/other-microcontrollers-forum/994417/tm4c123bh6pm-lost-can-massage-obje

e2e.ti.com/.../TestDK_5F00_Bord.zip

< TI.png>

在第186行中将#if 设置为1时的 CAN 总线状态在附件"TI.png"中指示、在第186行中将#if 设置为0时的 CAN 总线状态连接在"ti2.png"中

谢谢、此致、

 Kuerbis

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

    您好、Akemi、

     我需要一些时间来研究这一点、因为您知道 CAN 模块和协议与 UART 或 SPI 不同、非常复杂。 如果我发现有问题、我会回复、但很可能会在下周之前回复。 请与您的客户直接设定期望。  

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

    您好、Akemi、

     我有一些更新。  

    我想您只能看到总线上的最后一条消息的原因是、当您禁用自动重新传输时、TXRQST 位会立即被硬件清零。 当您调用 CANMessageSet 时、软件应在 成功传输且没有新数据时设置 TXRQST 位
    发送开始后、CANTXRQn 寄存器的 TXRQST 位将清零。 但是、如果重新发送被禁用、那么 TXRQST 在发送完成之前会以某种方式被清零。 发生这种情况时、使用 CANStatusGet 进行的检查将返回0、 并将 导致重复调用 CANMessageSet 10次。 换言之、第10条报文将在开始发送前覆盖报文对象中的所有9条报文。 这就是您看到总线上最后一条消息的原因。  

     我找到了两种权变措施。  

     第一种权变措施是等待 TXOK 中断。 TXOK 是表示传输已完成的状态。

     -第二种解决方法是等待消息对象。 报文对象 TX 中断将以相同的方式工作。 报文对象 TX 中断只在发送完成后产生。

     随附了两种不同的权变措施。  

    e2e.ti.com/.../main_5F00_use_5F00_message_5F00_object_5F00_interrupt.ce2e.ti.com/.../main_5F00_use_5F00_TXOK_5F00_status_5F00_interrupt.c

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

    您好、Charles、

     

    感谢您研究并找到解决方法。

    我已经通知客户并等待他们的反馈。

    如果他们有任何疑问和问题、请为他们提供支持。

     

    谢谢、此致、

    Kuerbis

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

    我是客户、要问这个问题。
    感谢您对原因和工作方法的建议。
    我理解这些。

    但是、如果可能、
    我想使用 TXREQ 位检查、因为我不想使用一些中断。

    现在,使用 TXREQ 位校验,我不能一次使用发送 TX 对象,同时禁用自动重试。
    但是、我可以使用一次只发送一个对象、同时禁用自动重试、使用 TXREQ 位检查。
    (使用项目:main.c Line186 #if 设置为1)

    如果 TM4C123BH6PM 的产品规格在使用我的项目时没有问题、我想使用 TXREQ 位检查。

    请发表评论。
    谢谢、此致、

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

    您好、Yuzo-San、

    [引用 userid="393450" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1019079/tm4c123bh6pm-lost-can-massage-object-2/3816902 #3816902"]

    但是、我可以使用一次只发送一个对象、同时禁用自动重试、使用 TXREQ 位检查。
    (使用项目:main.c Line186 #if 设置为1)

    如果 TM4C123BH6PM 的产品规格在使用我的项目时没有问题、我想使用 TXREQ 位检查。

    [/报价]

    正如我在上一次答复中所解释的那样, 如果您禁用自动重传,CANStatusGet ()将立即返回0。 因此,调用  CANStatusGE()并不是确定 CAN 报文对象是否已成功发送的可靠方法。 我建议您考虑我建议的变通办法。 您是否尝试过它们? 请尝试他们查看他们是否适合您。   

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

    感谢您的评论。
    您的解释非常详尽。
    我尝试使用您建议的变通办法修复我的项目。