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.

[参考译文] CC1352P:在 CC1352P 的 UART 侧出现数据乱码。

Guru**** 2601915 points
Other Parts Discussed in Thread: CC1352P, SYSCONFIG

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1062706/cc1352p-data-garbled-at-uart-side-in-cc1352p

器件型号:CC1352P
Thread 中讨论的其他器件: SysConfig

尊敬的 TI:

我正在使用 CC1352p Launchpad 并从4个从器件 CC2642P 接收数据。 在 CC1352P 上接收数据时、我希望数据显示在 UART 上。 我使用 Putty 以460800波特显示数据。 我使用的是 SDK 版本 simplelink_cc13x2_26x2_SDK_4_10_00_78。  

在 Putty 上接收数据时、我看到数据在 UART 端被加码。 我还使用 Teraterm 进行了检查、但我看到数据也在那里变乱。  

我能不能知道造成这种情况的可能原因。 此外、每当数据乱码时、下一个数据就会丢失。  

请在下面找到问题的图片。 我直接打印数据而不使用库。

在图像中、您可以看到我需要的数据位于第一行、但我多次看到乱码数据、其中下一行的数据与上一行数据合并、并导致 UART 上的下一个数据出现延迟。

我能不能知道这个问题的原因是什么?

谢谢你

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

    您好、Ankit、

    以下是一些意见和问题:

    1.您使用的 SDK 版本有点过时、因此我建议您更新到最新版本(v5.30)、因为 TI 驱动程序已经进行了一些更新。

    2.您能澄清一下从4个从器件接收数据的含义吗? 您如何接收数据(I2C、SPI 等)?

    3.当您说要使用 UART 显示数据时、您是否意味着要处理 CC1352中的数据、然后使用 UART 将其发送到 PC 软管?

    4.您使用的是哪个 UART 驱动程序? 请记住、有两个 UART 驱动程序(UART 和 UART2)?

    5.如何配置 UART (使用驱动程序)?

    5.您能不能澄清说直接打印数据而不使用库意味着什么?

    BR、
    安德烈斯

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

    您好 Andres、  
    请找到我的答案、颜色为蓝色

    1.您使用的 SDK 版本有点过时、因此我建议您更新到最新版本(v5.30)、因为 TI 驱动程序已经进行了一些更新。 好的、尝试一下

    2.您能澄清一下从4个从器件接收数据的含义吗? 您如何接收数据(I2C、SPI 等)? 进行通信

    3.当您说要使用 UART 显示数据时、您是否意味着要处理 CC1352中的数据、然后使用 UART 将其发送到 PC 软管? 是的、我们只处理了剩下的东西、才能正确显示它

    4.您使用的是哪个 UART 驱动程序? 请记住、有两个 UART 驱动程序(UART 和 UART2)? 我们使用 display.h 驱动程序直接使用 Display_print5函数进行显示

    5.如何配置 UART (使用驱动程序)? 在 SysConfig 中、我们具有相同的配置

    5.您能不能澄清说直接打印数据而不使用库意味着什么? 问题4答案相同

    我发现、通过使用 Display 函数、我们的 MCU 可以在任何 imp 任务进入时离开此任务、而此 Display.h 仅在 MCU 空闲时运行。 这是真的吗?

    您还可以与我分享一些示例代码、尝试使用 UART 驱动程序打印数据。 我尝试使用 UART.h、但在 UART 上看不到任何数据。 您能否共享任何示例代码以在 UART 上打印数据字符串、因为我看到的示例太多、到处都是不同的。 另外,运行 UART 必须执行哪些操作 ?

    此致、
    Ankit

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

    您好、Ankit、

    感谢您的说明。

    我知道、我建议切换到 UART 驱动程序(UART2会更好)。 显示驱动程序提供了一个额外的抽象层、以便您可以选择不同的显示实现(例如 LCD)。

    [引用 userid="495652" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum 1062706/cc1352p-data-garted-atuart-side -cc1352p/3935157#3935157]I 发现、通过使用 Display 函数、我们的 MCU 可以在任何 imp 任务进入时离开此任务、并且此 Display.h 仅在 MCU 空闲时运行。 这是真的吗?

    我真的不明白您在这里的意思。 据我所知、这里唯一的限制是、从 Hwi/Swi 上下文调用 Display 驱动程序可能不安全。  

    [引用 userid="495652" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum 1062706/cc1352p-data-garbed-at-uart-side-in-cc1352p/3935157#3935157"]
    您还可以与我分享一些示例代码、尝试使用 UART 驱动程序打印数据。 我尝试使用 UART.h、但在 UART 上看不到任何数据。 您能否共享任何示例代码以在 UART 上打印数据字符串、因为我看到的示例太多、到处都是不同的。 此外,运行 UART 必须执行哪些操作 ?[/QUERT]

    如前所述、最好使用 UART2驱动程序。 话虽如此、驱动程序可通过 多种不同的方式使用和配置。 您需要确定特定应用的最佳配置。 话虽如此、我建议首先尝试 uart2callback 示例。

    https://dev.ti.com/tirex/explore/node?node=AAlG9NOjN0wZZzxVYMi7OQ__BSEc4rl__LATEST

    只需运行示例即可熟悉驱动程序的工作原理、然后应该可以轻松地将其添加到您的特定应用程序中。

    https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_5_30_01_01/docs/drivers/doxygen/html/_u_a_r_t2_8h.html

    BR、
    安德烈斯

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

    您好 Andres、
    我尝试了 UART2但无法打印数据。

    供参考-我在其他文件中使用的其余 diaplay_printf 函数中使用相同的 UART2。
    这是否有任何问题? 此外、我还想通过我创建的缓冲区在 UART 上发送数据。 我不希望从 UART 接收任何数据、只需定期发送。 32字节数据的间隔为10 ms。

    我也尝试使用简单的 UART、但甚至无法打印字符串、并且能够使用简单的 displayprintf5打印所有内容。   

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

    您好、Ankit、

    [引用 userid="495652" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum 1062706/cc1352p-data-gartbowed-at-uart-side-in-cc1352p/3942975#3942975"]我尝试了 UART2,但无法打印数据。

    这话什么意思? uart2callback 示例是否适合您?

    [引用 userid="495652" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum 1062706/cc1352p-data-garbed-at-uart-side -in-cc1352p/3942975#3942975]FYI -我将对我在其他文件中使用的其余 diaplay_printf 函数使用相同的 UART2。
    这是否有任何问题。

    这不应该有任何问题、但请记住、您正在向代码中添加(可能)不必要的图层。   

    [引用 userid="495652" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum 1062706/cc1352p-data-garbed-at-uart-side-in-cc1352p/3942975#3942975"]此外、我还想从我创建的缓冲区发送 UART 上的数据。 我不希望从 UART 接收任何数据、只需定期发送。 32字节数据的间隔为10 ms。

    如前所述、最好使用基本 UART 驱动程序(UART 或 UART2)。 这些示例展示了如何发送或接收数据。 此外、由于您希望定期发送数据、因此您可以使用内核的时钟模块、甚至可以使用实际的计时器。 SimpleLink 包括时钟模块和计时器的示例。

    您还可以在此处找到相关文档:

    https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_5_30_01_01/docs/tirtos/sysbios/docs/cdoc/index.html

    https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_5_30_01_01/docs/drivers/doxygen/html/_g_p_timer_c_c26_x_x_8h.html

    [引用 userid="495652" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum 1062706/cc1352p-data-garted-atuart-side-in-cc1352p/3942975#3942975"]我也尝试使用简单的 UART,但甚至无法打印字符串,并且能够使用简单的 printf5打印所有内容。   [/报价]

    如何打印字符串? 请记住、UART 只是一个外设、驱动程序可让您访问和控制外设。 另一方面、格式化需要由应用程序处理。 因此您不能立即将 UART_write()用作 printf()。

    BR、
    安德烈斯

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

    您好 Andres、

    感谢您的回复。

    我尝试了简单的 UART、它对我来说很有用。

    我还有几个问题可以帮我解决。

    我使用了 UART 写操作、它对我有效。 但是我有多个参数,它们具有不同的数据类型,我只是使用 Display_print5打印,现在使用 itoa()将其转换为字符串,而现在使用 UART_WRITE,我如何打印不同的数据类型变量。

    2.我使用 strcat()通过使用 itoa()将变量转换为字符串来添加不同的变量。 但我知道 strcat 比 sprintf()慢,所以我使用了 sprintf()。 但在使用 sprintf()时,UART 会在几秒钟后随机停止。

    writeDataMode = UART_DATA_BINARY;
    波特率= 460800;

    您能不能建议我用某种方法将不同的数据类型变量组合成字符串、并尽可能快地将其发送到 UART、因为我们希望所有数据都能以更短的延迟实现实时。

    此致、
    Ankit Tomar

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

    您好、Ankit、

    您可能会从中获得一些想法:

    https://dev.ti.com/tirex/explore/node?node=ANqagjxZxWnBRB7bx0EnOw__pTTHBmu__LATEST

    具体而言、System_printf 与 SysCallback 代理一起使用。 SysCallback 模块允许用户插入在格式化完成后在 System_printf 中调用的类似 putc 的函数(putchFxn)。 一个常见的用例是插入一个将字符写入 UART 的 putchFxn 函数。

    您可以在此处阅读有关 SysCallback 模块的更多信息:

    https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_5_30_01_01/docs/tirtos/sysbios/docs/cdoc/index.html

    现在、请记住 、根据该线程、System_printf 会使用断点并影响时序、这对于时间敏感型应用可能是不利的。 因此,您需要运行一些测试,以确保它不会影响您的应用程序。 但是、即使您无法使用 System_printf 之类的内容、您也可以查看代码、并在将数据发送到 UART 之前了解如何格式化数据。

    此致、
    安德烈斯

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

    安德烈斯、您好!

    我尝试了 UART 库、很遗憾我仍然能够看到错误。 我仍然看到我的数据被变乱、一旦我看到数据损坏、我希望我看到我的数据在将近2秒内丢失。
    例如、如果我看到数据在5秒时间戳处变乱、那么在这个数据变乱后、我丢失了我的6、7秒数据并直接从8秒时间戳获取数据。

    因此、如果我的从属设备每1秒发送100个数据、那么我在每个数据损坏后丢失200个数据。

    为什么我在直接使用 UART 库之后也会看到这个问题。

    感谢您的持续支持。

    此致、
    Ankit Tomar

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

    您好、Ankit、

    [引用 userid="495652" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum 1062706/cc1352p-data-garbed-at-uart-side-in-cc1352p/3948886#3948886"]我尝试了 UART 库,但很遗憾,我仍然能够看到错误。 我仍然看到我的数据被变乱、一旦我看到数据损坏、我希望我看到我的数据在将近2秒内丢失。

    这意味着将 UART 集成到应用中的方式一定会有问题。

    [引用 userid="495652" URL"~/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum 1062706/cc1352p-data-garbed-atuart-Side-in-cc1352p/3948886#3948886"]因此,如果我的从属设备每秒发送100个数据,所以我在每个数据损坏后释放200个数据。

    UART 驱动程序中没有任何会导致类似情况的东西。 我需要查看您的应用程序代码、以便更好地了解您的问题。

    BR、
    安德烈斯