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.

[参考译文] MSPM0L1106:单线 UART 通信

Guru**** 2457760 points
Other Parts Discussed in Thread: MSPM0L1106

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1482513/mspm0l1106-single-line-uart-communication

器件型号:MSPM0L1106

工具与软件:

大家好、团队成员:

MSPM0L1106中的 UART 以传统方式正常工作。 在我的应用中、Tx 和 Rx 引脚连接在一起、用于进行单线通信。

以下是通信的顺序:
1.默认情况下、Tx 引脚配置为输出低电平、Rx 引脚配置为输入、无需任何拉电阻器。
2. DUT 首先通过将 Tx 引脚配置为 UART Tx 模式来发送数据、然后发送数据。
3.发送数据后、Tx 引脚将配置为输入、不使用任何拉电阻器。 Rx 引脚将配置为 UART Rx 模式以进行数据接收。
4.接收到数据后、Rx 引脚将配置为输入、而不使用任何上拉电阻器。 如果有数据传输、TX 引脚将配置为 UART Tx 模式、并重复步骤2中的步骤。

综上所述、数据发送和接收基本正常。 但是、在接收数据时、第一个字节的值很可能为0x00。 是否有办法避免接收该前导0x00?

谢谢。

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

    为什么 TX 引脚默认配置为输出低电平? 您是否也能将其设置为输入?

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

    尊敬的 Yuhao:

    感谢您的支持。

    由于外部电路要求、当没有数据通信时、逻辑应保持低电平。

    出于测试目的、我尝试在不使用拉电阻器的情况下将 Tx 引脚设置为输入、在使用拉低电阻器的情况下将输入设置为输入、得到了相同的结果。

    AlanC。

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

    Rx 引脚 配置为 UART Rx 模式时、如果该线路为低电平、则 Rx 会接收到0x00、因为低电平意味着新的启动。

    或许您可以检查线路电平。 只有当 LEVEL 为高电平时、您才会将 RX 引脚更改为 UART 模式。

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

    尊敬的 Yuhao:

    我已经检查了引脚上的电压电平、结果是正确的。 以下是启用和禁用 Rx 功能的代码。

    在 Rx 启用功能中、在启用 Rx 功能之前、Tx 线路将设置为上拉为输入。 我还尝试在接收缓冲区上进行虚拟读取、但这没有帮助。

    在 Rx enable 函数中、我添加了一条用红色矩形突出显示的线。 当启用该线路时、无法接收所有数据。 您能告诉我原因是什么吗?

    AlanC。

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

    在 Rx‘功能中、Tx 线路将设置为输入并拉至高电平、然后再启用 Rx 功能

    ‘为"拉高"、这是内部上拉电阻器、为40k Ω。 您是否观察到了线路的波形? 可能它未按预期上拉。

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

    尊敬的赵宇浩:

    是的、我已经通过示波器观察了线路波形、发送和接收之间没有突然下降。  

    在我之前的答复中、我试图清除接收中断以防止这个前导0x00。 但是、它仍然无法正常工作。

    让我感到困惑的地方在于、如果我在启用接收中断前清除了接收中断标志、则会导致器件在数据传输后无法接收数据。 您能告诉我原因是什么吗?

    AlanC。

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

    该中断用于提醒 CPU 接收到一个字节。 即使清除了中断、消息仍在 RX 缓冲器(或 FIFO)中。 您需要处理它(通常读取它)

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

    尊敬的赵宇浩:

    我理解您所说的内容、但问题是当执行"清除"中断时(上面用红色矩形突出显示的代码)、之后没有接收到任何数据。 如果没有该代码、仍然可以接收数据并接收额外的0x00字节。 我在 Rx 缓冲器上尝试了虚拟读取、结果相同、没有接收到更多数据。 (备注:我的应用程序中没有启用 FIFO。)

    根据您的回复、清除中断不应该影响 UART 接收数据、对吗?

    AlanC。

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

    您能否分享一个简化代码以便我进行快速测试。