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.
大家好、
客户提供了使用 Tiva DK-TM4C123G 重新生产的项目。对于以下 E2E 线程、我连接了它。
请您对此进行调查吗?
原始线程已锁定。 我创建一个新的。
TM4C123BH6PM:丢失 CAN 按摩物体
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 报文对象是否已成功发送的可靠方法。 我建议您考虑我建议的变通办法。 您是否尝试过它们? 请尝试他们查看他们是否适合您。
感谢您的评论。
您的解释非常详尽。
我尝试使用您建议的变通办法修复我的项目。