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.

[参考译文] TMS570LS3137:TMS570LS3137的 SCI UART 存在问题

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/833222/tms570ls3137-problem-with-the-sci-uart-of-the-tms570ls3137

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

您好!

我用一个 TMS570LS3137PGE 制作了自己的电路板。 一切都正常、但使用 SCI2作为 UART 时遇到一些问题。

首先、我的代码在9600波特率下运行得非常好。 我可以正确接收和发送数据。 但是、在我的最终应用中、我绝对需要38400波特率。 对于这样的波特率、我有很多误差。 接收到的字符通常为 false。 也许这是由于与 HalCoGen 的调整、这种调整只允许一个38462的波特率、而不是38400的波特率? 如何解决此问题?

其次、有一些我不理解的东西。 我目前正在使用中断来读取接收到的数据。 如果我没有在 main 函数(轮询)中放置"sciReceive()"、那么我永远不会遇到中断。 为什么会这样呢?

我附加了我的项目 in.zip、以便您可以看到我做了什么。

e2e.ti.com/.../8640.DownLinkUpLink.zip

提前感谢您的帮助。

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

    您好!

    异步波特率取决于 VCLK 和预分频器值。
    对于 SCI/LIN 模块、用于计算 SCI 波特率的公式在 TRM、部分26.2.3中
    对于 SCI 模块、请参阅27.2.3节

    这来自 sciReceive 函数定义:

    *  接收一个长度为'length'字节的块并将其放入
    *  由'data'指向的数据缓冲区。  中断是否已被中断
    *  启用使用中断模式接收数据、否则
    *  使用轮询模式。  在中断模式下、接收被设置为和
    *  例程立即返回、sciReceive 一定不能被调用
    *  在 sciNotification 完成传输之前
    *  将调用回调。  在轮询模式下、sciReceive 不会
    *  返回 直到传输完成。

    sciReceive、当使用中断模式时、设置 Rx.length 和指向数据的指针、并立即返回。

    您可以在此处找到 sciReceive 函数的说明:

    此致、
    米罗

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

    感谢您的回答。

    我能够尝试根据 VCLK 修改波特率的确切值并规定值、但我的问题没有任何变化。

    在4800到19200的波特率下、我的代码运行得非常完美。 从38400 (我必须达到的波特率)到更多、当我从 PC 到 TMS570LS3137进行传输时、某些字符是正确的、而其他字符是不正确的。

    我不明白为什么我的某些字符没有问题、但我与其他字符有问题。

    再次提前感谢您。

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

    您好!

    使用轮询方法时是否有相同的问题?

    此致、
    米罗

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

    您好!

    是的、我在轮询模式下观察到同样的问题

    此致、
    Maxime

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

    我可能注意到了一些奇怪的东西:

    在38'400波特时、当我从 MCU 向 PC 发送数据时、所有接收到的数据都是正确的。 但是、当我将数据从 PC 发送到 MCU 时、许多字符是错误的。

    如果我将终端设置(我使用 Termite)修改为38'000波特、则这次从 PC 发送到 MCU 的所有字符都是正确的! 但是、这次、MCU 发送的 PC 上接收到的数据不再正确。

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

    问题迎刃而解! 这是两块 PCB 之间的接地问题... (解决方案太愚蠢了。)

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

    您好!

    感谢您的反馈!