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.

[参考译文] TM4C123GH6PM:UART 首次读取错误值

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/619607/tm4c123gh6pm-uart-first-time-read-wrong-value

器件型号:TM4C123GH6PM
Thread 中讨论的其他器件:Profibus

大家好、  

我的 UART 通信有问题。 我连接了两个 Tiva 板进行 UART 串行通信(以模拟我等待制作的定制电子器件的运行)。 这是一个简单的通信、其中一个电路板发送另一个电路板1字节数据两次(2字节)、只是为了确认到达的数据的有效性。  点击按钮即可发送2个字节。 我将接收 板 UART 配置为在接收到2个字节时中断、这似乎可以正常工作。 问题是第一次接收时、系统在接收到第一个字节并读取接收到的字节和一个零字节时中断。 由于电路板读取前一个消息的剩余字节和新消息的一个字节、因此现在为我移位下一个接收。 我尝试在配置函数中读取 FIFO 中的数据、但这似乎不起作用。 如何处理此问题、如何确保系统启动时 FIFO 中没有任何内容? 下面是接收器板 UART 的代码。  

ROM_SysCtlPeripheralEnable (SYSCTL_Periph_UART1);
GPIOPinConfigure (GPIO_PC4_U1RX);
GPIOPinConfigure (GPIO_PC5_U1TX);
ROM_GPIOPinTypeUART (GPIO_PORTC_BASE、GPIO_PIN_4 | GPIO_PIN_5);
ROM_UARTConfigSetExpClk (UART1_base、ROM_SysCtlClockGet ()、115200、(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE));
ROM_IntEnable (INT_UART1);
ROM_UFIFIntEnable (UART1_BASE、UART1_UART1_UART1_BASE

);UART1_UART1_Disable (UART1_RX)
UARTFIFOEnable (UART1_base);
UARTFIFOLevelSet (UART1_base、UART_FIFO_TX1_8、UART_FIFO_RX1_8);
UINT32_t dummy=0;
while (UARTCharsAvail (UART1_base)
) dummy = UARTCharGet (UART1_base); 

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

    [引用 user="Djedjica"],如何确保在系统启动时 FIFO 中没有任何内容? [/报价]

    读取它直至其为空?

    BTW 如果您只需要读取两个字节并始终保持它们的顺序、这将不可避免地失败。 您需要某种同步机制。

    Robert

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

    您好、Robert、

    类似的问题出现在我们的 Us -我们是否可以询问"CR/LF"(还是另一个"罕见"字符)。 在您看来、可以作为串行终端-提供足够的"同步"?   谢谢...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我还想到了这一点、这就是为什么我在 UART 配置中使用该虚拟读取、但这似乎不起作用、因为我在第一个中断上仍然获得该空字节。 因此、将 UART 设置为在某个 FIFO 级别上中断(在我的情况下为2个字节)是不够的、但我还需要添加一些同步机制?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当然、只要字符未显示在正常数据中、即使只是 CR 或仅 LF 也能正常工作。 只要您有指示信息开始的内容、您就可以重新同步。 您可以使其更复杂、更可靠(校验和、数据包长度字段、数据包结束指示符)、以及需要使用的二进制数据。 对于 ASCII、CR/LF 可以正常工作、当然、显示效果也很好。

    Robert

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

    [引用 USER="Djedjica"]所以在某些 FIFO 级别(在我的例子中为2个字节)设置 UART 中断是不够的,但我还需要添加一些同步机制?

    考虑因损坏而插入额外字符(或删除字符)时会发生什么情况。 如果一端正在传输、而另一端正在设置、会发生什么情况。 看门狗? 功率骤降? 有人将电缆缠绕在荧光镇流器上**。

    另外请记住、2字节 FIFO 中断并不意味着 FIFO 中有两个字节、它意味着以下情况之一:

    • FIFO 中的两个字节
    • FIFO 中超过两个字节
    • FIFO 中的一个字节且接收超时已通过*

    Robert

    以实现合理的实施。 TI 将 RTI 与 RI 分开是很奇怪的。 合理的实施将以相同的方式处理这些问题。

    **我听说原始以太网手册中包含有关在镇流器或线性加速器旁边连接以太网电缆(然后是厚以太网同轴电缆或压降电缆)的明确警告。

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

    Robert - Merci -我们的许多设计都利用了我们的显示功能- CR/LF 证明是理想的-感谢您确认我们的选择。  (不知怎么说-我"不能"喜欢!")

    而且-您的方向"不要重新发明 Modbus -如果您需要使用它"证明是正确的、因此省时省力-太棒了!    也许甚至是"概括性"。 "适当地寻找--然后"附加到"--"现有标准"(而不是"发明新的/新的标准") --上升为"始终 应考虑!"

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我不考虑这些情况的错误。 我需要继续阅读 Modbus、了解如何为该 MCU 实现它。 我担心使用 CR/LF 不是一个适合我的系统的解决方案、因为字节内的任何位组合都是同样可能的。
    使用 Simply RI 不够可靠? 或者、如果我在此器件的 Modbus 实现失败、我可以使用它吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Robert Adsett"]... 有关以太网电缆布线的显式警告... 靠近镇流器或线性加速器。[/quot]

    被认为是不可接受的?   (仅限)"现在"您告诉我们!    (Ratz - Fermi Lab"迷宫结构"提供的众多安全"附加点"、被"裂缝"(警告未意识到)员工利用...)

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

    [引用 user="Djedjica"]使用 Simply RI 不够可靠?

    仅接收中断不会为您提供任何确定信息开始时间的方法。

    [引用 user="Djedjica"]或者,如果在此器件的 Modbus 实现失败,我可以使用它吗?

    有许多串行通信协议可用*。 如果您不需要大量带宽、我建议从 Modbus/ASCII 开始。 它非常简单、在时间限制方面不是很好、我在解释器中做了一个主程序、但没有太多问题。

    如果您需要较频繁的大量小型数据包、我建议您使用 CAN。 它负责所有数据包详细信息、因此您可以专注于更高级别的接口/协议。 您必须防范增量值、工作起来要付出更多的努力、但它内置了许多功能、使其更可靠。

    Robert

    *让我们看看可以命名的数量。 必须在某个位置有一个列表。 在我的头部顶部 Modbus/RTU、Modbus/ASCII、DMX、RDM、MDB (我刚刚听说过)、Profibus (我想)

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

    [引用 USER="CB1_MOBILE]'并且(仅限)"现在"您告诉我们!  [/报价]

    不要忘了、在将一个孔钻进总线电缆以进行攻丝时、您必须格外小心。

    Robert