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.

[参考译文] CCS/MSP430F5172:遇到 UART 的异常行为

Guru**** 2556200 points
Other Parts Discussed in Thread: MSP430F5172

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/596360/ccs-msp430f5172-experiencing-strange-behaviour-with-uart

器件型号:MSP430F5172

工具/软件:Code Composer Studio

我在某种程度上遇到了 MSP430F5172及其 UART 的奇怪问题。

我已通过 UART (115200bps)将另一个 IC 连接到微控制器、并编写了一个通信代码(发送命令并检查应答)。

一切都好、我收到了每个命令的预期答复。 直到我断开调试器并希望使用电池作为电源进行测试。 如果未连接 FET、我就无法得到正确的回复(LED 显示错误)。

起初、我认为它必须是模块、因此我仔细观察了 MCU UART_RX 线路并检查了位流-看起来不错。 我还将 FTDI UART 电缆的 RX 引脚连接到此线路、并获得了以 hterm 表示的正确值。

然后、我怀疑 SMCLK 中存在任何偏差(通过 DCO 和 XTAL)、并在 FET 连接和断开时检查频率-一切看起来都很好。

我已经测试了多个内核电压和 xtal 驱动器。

是否有人有任何想法或看到过相同的问题? 我不想更改 MCU、因为我只有这些 PCB 之一、也不想破坏焊盘...

感谢你的帮助

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

    我对整个电源使用3V 电压。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我刚刚发现、一旦调试器不再连接到 PCB、就会设置 UCFE 位(组帧错误)。
    我现在启用了 UCRXEIE (接收错误字符中断使能)、但正如预期的那样、这没有太大帮助。 似乎我现在接收到一些字符、但仍然不是所有数据。

    有人提出建议吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    UCFE 意味着一个低停止位。

    电压电平或时序有问题。 您使用的是什么时钟源? 它的精度是多少?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    作为 DCO 的时钟源、我使用连接到 XT1的晶体、这是一个具有20ppm 和12pF 负载电容的 CC5V-T1A。 作为负载电容、我使用12pF 的内部电容器、可能太大。

    但我从未遇到过这些问题、UART 在使用 FET 进行调试时可以工作、在 FET 断开连接时停止工作。

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

    DCO 没有时钟源、它是时钟源。
    您实际上是否使用 XT1作为 FLL 的时钟源?
    您是否使用禁用 FLL 或禁用 SMCLK 的低功耗模式? (这将解释调试器使其工作的原因。)

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

    是的、XT1是 FLL 的时钟源、DCO 是用于 UART 的 SMCLK 的时钟源。
    但问题出在 UCS 设置中。

    我复制了一个工作中的低功耗项目中的源代码并实现了 UART。 在 UCS 设置中、我设置了 SMCLKOFF 位。
    为了等待接收字符、我有一种使用 LPM0的睡眠方法。
    由于我删除了 SMCLKOFF 位、它正常工作。

    按照我的理解、如果 SMCLKOFF = 1且 SMCLKREQEN = 1、SMCLK 在 LPM0至 LPM4之间保持有效。
    我是否误解了这里的内容?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如用户指南中的表5-1所示、如果 SMCLKREQ 被置位、SMCLK 确实保持激活状态。

    但用户指南的第36.3.14节指出、USCI 模块在空闲时不会设置 SMCLKREQ。

    这意味着 DCO 和 FLL 不会连续运行、并且 FLL 没有足够的时间将 DCO 调整到正确的频率。

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

    36.3.14在低功耗模式下的 UART 模式下使用 USCI 模块

    USCI 模块为低功耗模式下的使用提供了自动时钟激活。 当 USCI 时钟源因器件处于低功耗模式而处于非活动状态时、不管时钟源的控制位设置如何、USCI 模块都会在需要时自动激活。 时钟保持激活、直到 USCI 模块返回到其空闲状态。 在 USCI 模块返回空闲状态后、时钟源的控制会恢复到其控制位的设置。

    我只会将 SMCLKOFF 保持为0,这对我来说现在是可以的:)