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.

[参考译文] CC1352R:UART2上的流控制未激活

Guru**** 2337880 points
Other Parts Discussed in Thread: CC1352R, LAUNCHXL-CC1352R1, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1518081/cc1352r-flow-control-not-active-on-uart2

器件型号:CC1352R
主题中讨论的其他器件: MIOTYSysconfig

工具/软件:

您好:  

我想通过具有硬件流控制的 Uart2与我的 CC1352R 板进行通信、或者与另一个 CC1352R 板进行通信。 我使用 SDK 5.30

因此、我已在.syscfg 中为 UART2启用流控制。 我想 在阻塞模式下使用 UART2。  

UART 通信运行良好、但没有流控制。 如果断开 CTS 并将其设置为高电平或低电平、通信仍然有效。

我使用逻辑分析仪检查了 UART:RTS  始终为高电平、CTS  始终为低电平。

请帮帮我。  


我的代码是:  

/*
* ======== mainThread ========
*/
void *main_uart(void *arg0)
{
uint8_t uart_rx_buffer[UART_BUFFER_SIZE]; /* Buffer for UART */
uint32_t status = UART2_STATUS_SUCCESS;

/* Create a UART in CALLBACK read mode */
UART2_Params_init(&uartParams);
uartParams.baudRate = 115200;
uartParams.writeMode = UART2_Mode_BLOCKING;
//uartParams.writeCallback = writeCallback;
uartParams.readMode = UART2_Mode_BLOCKING;
//uartParams.readCallback = callbackFxn;
uartParams.readReturnMode = UART2_ReadReturnMode_FULL;

uart = UART2_open(CONFIG_UART2_0, &uartParams);

if (uart == NULL)
{
/* UART2_open() failed */
while (1);
}

status = UART2_write(uart, "test", 4 , &numBytesWritten);
if (status != UART2_STATUS_SUCCESS)
{
/* UART2 read() failed */
printf("%d\n", status);
while (1);
}

/* Loop forever echoing */
while (1)
{
numBytesRead = 0;

//Only Tx if both flags false
if(!uart_flag_tx_mioty && !uart_flag_tx_ble)
{
status = UART2_readTimeout(uart, uart_rx_buffer, UART_BUFFER_SIZE, &numBytesRead, 5000); 

if (numBytesRead > 0)
{

UART2_write(uart, "test", 4, &numBytesWritten);

}

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

    您好、David:

    我想在以下线程中看到相反的情况: (+) UART2_writeCancel ()/ UART2_close ()在外设断开连接时挂起-低于1GHz 论坛-低于1GHz - TI E2E 支持论坛

    您能否证实这是相同的吗?

    此致、

    Arthur

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

    您好 Arthur、  

    感谢您的答复。  

    我的问题是、TI CC1352电路板 似乎不 启用流控制。  

    设置:  

    - SDK 5.30、Code Composer Studio 版本11.10、Mikrocontroller LaunchXL-CC1352R1

    - PC 与 USB 到 TTL 适配器(SH-U9C5 )与软件 Docklight (用于与流量控制的 UART 通信)。

    - 在 TI ,我使用 uart2echo 样品。 我们唯一更改的是在 SysConfig 中启用流控制:


    我可以看到以下 行为:

    -软件 docklight 首先要发送一条 UART 消息。 TI 始终将其 RTS 引脚 (PC CTS)设置为高电平。 因此、具有流控制的 Docklight 软件不会发送消息、因为它会等待 TI 将 TI RTS 引脚设置为低电平。 TI 从不将该引脚设置为低电平、因此我必须从外部将 CTS 引脚设置为低电平、因为消息是通过 UART 传输的。    

    -  无论 TI 的 CTS 引脚是高电平还是低电平, TI CC1352始终通过回显来响应此消息。 因此、我假设 TI 未启用 流量控制。

    如何检查 流量控制是否已启用?   只需 在.syscfg 中勾选流控制是否足够、或者我是否需要执行其他操作?  

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

    您好、David:

    在 SysConfig 中启用复选标记将启用流控制、如寄存器视图中所示:

    顺便说一下、CC1352上的 RTS 连接到  SH-U9C5的 CTL 右侧?

    此致、

    Arthur

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

    尊敬的 Arthur:  

    未设置寄存器:

    是的、我在 SH-U9C5的 CTL 上连接了 TI RTS

    此致、

    David

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

    您好、David:

    实际上、这似乎是我们在6.30 SDK 中修复的一个错误: CC13xx/CC26xx SimpleLink Core SDK 更改日志

    您是否可以将 SDK 更新为6.30、至少要进行测试?

    此致、

    Arthur

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

    尊敬的 Arthur:  

    好的、感谢您的  澄清。  

    我 能够用6.30测试它,但对于我们的应用程序,我们需要使用5.30。  
    您是否知道5.30流量控制的解决方法?

    此致
    David

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

    您好、David:  

    您可以在返回的 UART2 hwAttrs 结构中设置 RTS 和 CTS 引脚索引、并将 FlowControl 成员设置为以下值:

    hwAttrs->FlowControl == UART2_FLOWCTRL_HW;
    然后、通过 uartEnableRTS 和 uartEnableCTS 启用 CTS 和 RTS  
     
    此致、
     
    Arthur
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Arthur:  

    谢谢您的解释、但我不太理解。  

     UART2 hwAttrs 结构被声明为一个常量、并在每次构建期间生成。  因此、无法通过修改 hwAttrs 在运行期间动态启用或设置 RTS 和 CTS 引脚。

    我 也不理解  uartEnableRTS 和 uartEnableCTS 的含义  

    感谢您的详细说明。

    此致  
    David

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

    您好、David:

    事实上、事后看来、没有必要这样做。

    我的意思是使用手动启用硬件流控制  driverlib:

    • 使用 IOCIOPortIdSet 设置与 RTS 引脚的多路复用
      • 在您的情况下、可能是:
        IOCIOPortIdSet(IOID_18,  IOC_PORT_MCU_UART0_CTS);
        IOCIOPortIdSet(IOID_17,  IOC_PORT_MCU_UART0_RTS);


    • 然后、启用流控制: UARTHwFlowControlEnable

    此致、

    Arthur