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.

[参考译文] CC2652P:在回叫模式下无法实现 UART 接收器- CC2652P

Guru**** 2585275 points
Other Parts Discussed in Thread: CC2652P, SYSCONFIG, Z-STACK

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1028912/cc2652p-failed-to-achieve-uart-receiver-in-call-back-mode---cc2652p

器件型号:CC2652P
Thread 中讨论的其他器件: SysConfigZ-stack

大家好
你好!!!

使用的工程:ZR_SW_OTA_CLIENT (CCS 版本)

堆栈版本:5.20.00.52

SoC:CC2652P

当我运行代码回调函数未执行时、我已将 UART 接收器配置为回调模式。

如果有人遇到相同的问题或知道解决方案、请帮助我解决。

以下是我的 UART 配置:

#define UART_DATA_EVENT 0x0100


静态 UART_Handle uartHandle;


静态 UART_Params uartParams;

UART_INIT();
UART_PARAMS_INIT (uartParams);

uartParams.readMode = UART_MODE_CALLACK;
uartParams.readDataMode = UART_DATA_BINARY;
uartParams.writeDataMode = UART_DATA_BINARY;
uartParams.readReturnMode = UART_return_full;
uartParams.readCallback =&customUartCb;
uartParams.readEcho=UART_ECHO_OFF;
uartParams.baudrate = 115200;
uartHandle = UART_OPEN (PPL_CNT_UART、uartParams);

if (uartHandle ==空)

printf ("UART 句柄为空\n"\});

回拨定义:  

void customUartCb (UART_Handle uartHandle、void * buff、size_t size)

 appServiceTaskEvents |= UART_DATA_EVENT;
  printf ("UART 回拨被触发\n");
  Semaphore_post (appSemHandle);

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

    Lokesh 您好!

    您的 SysConfig UART 设置是什么、您使用的是 LAUNCHXL-CC1352P-2项目、您是否禁用了 CUI?

    此致、
    Ryan

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

    您好 Ryan Brown1

    感谢您的回复  

    我 正在使用  LAUNCHXL-CC1352P-2项目、并且 CUI_DISABLE 预处理器标志已禁用、请参阅所附的 UART 配置图像。 UART Configuration

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

    你好、Lokesh、

    您似乎正在使用 SysConfig 中的"Custom Board"选项。  引脚28和29分别为 DIO_18和 DIO_19、用作 LAUNCHXL-CC1352P-2上的 RTS 和 CTS 引脚。  如果您使用的是定制板、请使用示波器或逻辑分析仪检查 UART RX/TX 线路、以确保正确接收/传输信号。

    此致、
    Ryan

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

    您好、Ryan Brown1

    具有阻塞模式的 UART 工作正常、具有回调机制的 UART 工作不正常。
    如果 UART 信号未正确传输、我希望阻塞的 UART 不能正常工作?

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

    感谢您提供这些附加信息。  在这种情况下、似乎硬件已正确连接、引脚已正确初始化。  您如何在应用中使用 UART_Read?  您是否曾尝试将 uartecho 示例修改为测试或考虑评估 UART2驱动程序(uart2callback) ?  这将有助于确认是否涉及 Z-Stack。

    此致、
    Ryan

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

    不、我没有修改 uartecho 示例、这里是我的 UART 配置

    UART 配置:

      UART_init();
      UART_Params_init(&customUartParams);
      customUartParams.readMode=UART_MODE_CALLBACK;
      customUartParams.baudRate = 115200;
      customUartParams.readCallback=customUartRead;
      customUartParams.writeCallback=NULL;
      customUartParams.readDataMode=UART_DATA_BINARY;
      customUartParams.readEcho= UART_ECHO_OFF;
    
      customUartHandle = UART_open(custom_uart, &customUartParams);
      if(customUartHandle != NULL)
      {
          printf("UART init ok \n");
      }

    根据我的理解和配置、当 UART RX 线路上有数据可用时、回叫(customUartRead)应该会被激发、但不会发生、控制永远不会到达回叫。

    每次我运行代码 UART 初始化都成功。

    回调函数定义:

    static uint8_t buffer[1]={0};
    static void customUartRead (UART_Handle customUartHandle, void *buff, size_t count)
    {
        printf("number bytes read: %d\n",UART_read(customUartHandle, &buffer, 1));
        printf("data read: %d\n", buffer[0]);
    }

    请告诉我回电未触发的原因或配置 UART 时出现任何错误。

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

    您的初始化似乎正常、我相信您的困惑是 UART_READ 已被放置在定制 UartRead 中、就好像该函数应该在 UART 回调执行之后出现一样。  但是、TI 驱动程序被设计成在为定制 UartRead 做准备时调用 UART_READ、并在每次使用回调后再次调用 UART_READ。  回调使您能够识别缓冲区已填充接收到的数据。  您可以查看 Z-Stack CUI 应用示例和 uart2callback 以供参考。

    此致、
    Ryan

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

    为什么要在"customUartCb"中执行"printf"? 回调是软中断服务例程、它实际上是 中断服务例程、因此"printf"和"semaphore_post"最好不要在其中运行。

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

    然后、您应该在"UART_open"之后执行"UART_Read"

    回调模式下的 UART_READ 意味着在回调执行时设置缓冲区以接收数据。 如果在回调中收到数据、则应 再次执行"UART_READ"以进行下一次接收。

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

    爱利斯主
    你好!!!

    我希望确保在 UART RX 线路中有数据时执行回调、这是打印 f 状态的原因。

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

    你好、Lokesh、

    如果在遵循 Aries 和我的建议后您的问题未得到解决、请使用您尝试过的修改后的代码提供进一步的更新。

    此致、
    Ryan

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

    您好 Ryan Brown1
    我的问题仍未解决、  注册的我的 UART 回调(customUartRead -由我定义)未执行、请建议回调函数定义应该是什么。

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

    是否在 UART_open 后放置了 UART_read?  您是否尝试过 uart2callback 并/或针对 UART 驱动程序修改过它?

    此致、
    Ryan