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.
您好!
我用一个 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 和指向数据的指针、并立即返回。
此致、
米罗
感谢您的回答。
我能够尝试根据 VCLK 修改波特率的确切值并规定值、但我的问题没有任何变化。
在4800到19200的波特率下、我的代码运行得非常完美。 从38400 (我必须达到的波特率)到更多、当我从 PC 到 TMS570LS3137进行传输时、某些字符是正确的、而其他字符是不正确的。
我不明白为什么我的某些字符没有问题、但我与其他字符有问题。
再次提前感谢您。
您好!
使用轮询方法时是否有相同的问题?
此致、
米罗
您好!
是的、我在轮询模式下观察到同样的问题
此致、
Maxime
我可能注意到了一些奇怪的东西:
在38'400波特时、当我从 MCU 向 PC 发送数据时、所有接收到的数据都是正确的。 但是、当我将数据从 PC 发送到 MCU 时、许多字符是错误的。
如果我将终端设置(我使用 Termite)修改为38'000波特、则这次从 PC 发送到 MCU 的所有字符都是正确的! 但是、这次、MCU 发送的 PC 上接收到的数据不再正确。
问题迎刃而解! 这是两块 PCB 之间的接地问题... (解决方案太愚蠢了。)