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.

[参考译文] LAUNCHCC3220MODASF:无法使用 UART2 API 读取 UART

Guru**** 2482225 points


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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1282532/launchcc3220modasf-unable-to-read-uart-using-uart2-api

器件型号:LAUNCHCC3220MODASF

您好!

我正在尝试实现 UART 通信以发送 Modbus 帧并读取响应。 当我使用 GPIO 引脚控制 RS485的 RE 和 DE 引脚时、我已使用逻辑分析仪成功测试了 RS485 Modbus 通信。 但是、我目前遇到这样一个问题、即无法通过 Launchpad 上的 Rx 引脚接收 Modbus 响应。 尝试读取读取读取字节的大小时、仅显示一个字节、且读取缓冲区看起来为空。 我的读取函数是否存在潜在问题?

代码片段:

size_t 字节 Read;
uint8_t 缓冲器[25];

void uart_test(){
//初始化 UART2参数
UART2_Params 参数;
UART2_params_init (&params);
params.baudrate = 9600;
params.readMode = UART2_Mode_Blocking;
params.writeMode = UART2_Mode_Blocking;
params.readReturnMode = UART2_ReadReturnMode_partial;
//打开 UART
UART2_Handle UART;
UART = UART2_OPEN (CONFIG_UART_RS485、&params);
//检查 UART 是否成功打开
if (uart == NULL){
//打印错误消息并相应地返回或处理错误
display_printf (display、0、0、"Error opening UART\n");
返回;

while (1){
GPIO_WRITE (CONFIG_GPIO_0、1);
//将 Modbus 帧写入 UART
uint8_t modbusFrame[]={0x03、0x03、0x00、0x00、0x00、 0x01、0x85、0xE8};
int32_t writeStatus = UART2_write (UART、modbusFrame、sizeof (modbusFrame)、NULL);
delayMilliseconds(8);
GPIO_WRITE (CONFIG_GPIO_0、0);
if (writeStatus <0){
//处理写入 UART 时发生的错误
display_printf (display、0、0、"Error writing to UART\n");

睡眠(2);
//从 UART 读取响应

uint32_t readStatus = UART2_read (UART、缓冲区、sizeof (buffer)、&bytesRead);
display_printf (display、0、0、"readbytet size %d\n"、bytesRead);
if (readStatus!= UART2_STATUS_SUCCESS){
//处理从 UART 读取时发生的错误
display_printf (display、0、0、"Error reading from UART\n");
}其他{
//在"缓冲区"中处理接收到的数据
display_printf (display、0、0、"Success reading from UART\n");
//以十六进制格式打印每个字节

display_printf (display、0、0、" data:%x\n"、buffer[1]);
display_printf (display、0、0、" data:%x\n"、buffer[2]);
display_printf (display、0、0、" data:%x\n"、buffer[3]);
display_printf (display、0、0、" data:%x\n"、buffer[4]);
display_printf (display、0、0、" data:%x\n"、buffer[5]);
display_printf (display、0、0、" data:%x\n"、buffer[6]);
display_printf(显示, 0, 0 ,"数据:%x\n", buffer[7]


睡眠(5);

//关闭 UART
UART2_Close (UART);

控制台日志:

readbytet 大小1
从 UART 成功读取
数据:0
数据:0
数据:0
数据:0
数据:0
数据:0
数据:0

逻辑  
分析器:



引脚  配置:

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

    您好!

    我将在明天跟进、我看到您打开了一个新主题、因此我将继续并关闭上一个主题。

    此致!

    罗格利奥

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

    您好!
    是否有更新?

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

    您好!
    有更新吗?

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

    尊敬的 noushadali:

    很抱歉耽误你的时间。

    根据我在代码中看到的内容、您正在正确调用 UART_read。 我只想重申一下、这是在流控制关闭的情况下、RS485确实会向 RX 线路发送数据。

    此致!

    罗格利奥

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

    您好!

    当数据出现在 Rx 线上时、但仍无法使用 Launchpad cc3220modasf 的 Rx 引脚(P45)读取该数据。是否有选项可以启用 UART 来调试日志? 怎么做?

    测试设置:



    读取 UART 是否需要修改任何跳线?

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

    尊敬的 noushadali:

    您是否尝试过为 RX 使用不同的引脚? 如果您使用 uartcallback 演示、该功能是否起作用? 再说一次、我看不到任何特别错误的代码、因此我假设它可能与硬件相关。

    此致、

    罗格利奥

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

    您好!

    如果使用 UART0、则成功发送 UART 数据、唯一可用的选项是引脚 P45、其余引脚专用于 Launchpad 上的其他功能。




    我的 SDK uartecho 和 uartpower 中仅适用于 UART 的示例代码都是带有调试探针 UART 的打印控制台、对我的项目没有帮助。

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

    您好!

    现在、我可以使用 P7和 P8引脚通过 UART1 API 读取 UART、但读取的数据不能超过16个字节。 UART2 API 读取字节大小是否将其限制为16个字节? 如何提高它?
    是否有任何选项可以在 UART2 API 中设置 Rx 和 Tx 环形缓冲区?

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

    尊敬的 Noushadali:

    您可以在 syscfg 文件中设置 Rx 和 Tx 环形缓冲区。

    此致!

    罗格利奥   

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

    您好!

    我们使用的是简单 link_cc32xx_sdk_4_10_00_07版本、其中 systcofig 文件不包含用于设置 UART2 API 中 Rx 和 TX 缓冲区的任何选项


    有什么想法可以解决此问题?

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

    尊敬的 Noushadali:

    我看不到 UART 驱动程序中的 API 更改缓冲区大小、我需要深入研究一下。 但是、最快的解决方案是更新到更新的 SDK。 您是否有理由使用非常过时的 SDK?

    此致、

    罗格利奥

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

    您好!

    目前我们正在使用 simplelink_cc32xx_sdk_4_10_00_07 SDK 版本 和 azure_cc32xx_4_10_01_01 azure 插件版本。 哪是最新的 azure 插件版本? 最新的 azure 插件版本 与最新的 simplelink SDK 版本兼容? 当我们尝试 使用最新的 simplelink SDK 版本在 azure_cc32xx_4_10_01_01上导入示例代码时、会收到一些工程导入错误。 为了解决此错误,我们 切换到了最低版本的 simplelink SDK (sdk simplelink_cc32xx_sdk_4_10_00_07 )



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

    您好!

    很遗憾、我们必须留在这个版本的 SDK 上。 我正在尝试找到一个您可以调用的 API 来控制环形缓冲区。 当我找到一些东西时、我会继续跟进。

    此致、

    罗格利奥

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

    您好!

    有更新吗?

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

    您好!
    有更新吗?

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

    您好!
    有更新吗?