TI中文支持网
TI专业的中文技术问题搜集分享网站

CC3235S: 串口接收和串口发送会有影响?

Part Number:CC3235S

使用的是simplelink_cc32xx_sdk_5_10_00_02\examples\rtos\CC3235S_LAUNCHXL\demos\at_commands例程进行改写

在模块上创建TCPServer服务器,模块串口收到的数据直接通过该服务器发送到电脑上的TCPClient,电脑的TCPClient将数据发送到模块,模块将数据转发到串口。

双向收发都正常,但是当我将TX和RX短接时,理论上讲应该可以在电脑的Client发送数据,并且在电脑的Client收到数据,但是实际发现电脑Client接收到的数据有缺失,发送一包数据量为60字节,实际接收到前16个字节和后17个字节。

为了排除是网络端的影响,我设计模块收到网络端的数据后,不通过串口直接转发回网络端,并无数据丢失。

串口使用的是例程中的串口,改写了InitTerm中的串口配置,以及串口接收处的打包处理:

UART_Handle InitTerm(void)
{
    UART_Params uartParams;

    UART_init();
    UART_Params_init(&uartParams);

    uartParams.writeDataMode = UART_DATA_BINARY;
    uartParams.readDataMode = UART_DATA_BINARY;
    uartParams.readReturnMode = UART_RETURN_FULL;
    uartParams.readEcho = UART_ECHO_OFF;
    uartParams.baudRate = 115200;
    uartParams.readTimeout = 20;    //这里想要使用串口超时功能,因为要对收到的数据进行打包。

    uartHandle = UART_open(CONFIG_UART_0, &uartParams);
    UART_control(uartHandle, UART_CMD_RXDISABLE, NULL);

    return(uartHandle);
}

int GetRawCmd(char *pcBuffer, unsigned int uiBufLen)
{
    char cChar;
    int iLen = 0;
    int rlen = 0;

    while(1)
    {
        rlen = UART_read(uartHandle, &cChar, 1);

        if(rlen>0)
        {
            *(pcBuffer + iLen) = cChar;
            iLen++;
            if(iLen>=uiBufLen-1)
            {
                *(pcBuffer + uiBufLen -1) = '\0';
                break;    //缓存区占满则判定此数据为1包
            }
        }else{
            break;    //串口接收超时则判定此数据为1包
        }
    }

    return iLen;    //返回该包总长度,通过网络接口向网络端发送。
}

void Message(const char *str)
{
#ifdef UART_NONPOLLING
    UART_write(uartHandle, str, strlen(str));
#else
    UART_writePolling(uartHandle, str, strlen(str));    //网络端收到的数据,通过该接口打印到串口。
#endif
}

1.期望能够看下串口超时的处理是否正确。

2.期望能够看下UART_read和UART_writePolling在该场景下是否会导致冲突。

Kevin Qiu1:

user6491819 说:模块串口收到的数据直接通过该服务器发送到电脑上的TCPClient,电脑的TCPClient将数据发送到模块,模块将数据转发到串口。

一共几个CC3235,用了几个串口?

超时时间是不是太短了,改大一些试试

UART_readPolling最好和UART_writePolling一起使用

,

user6491819:

感谢回复

仅用到一个3235,从串口端来看,TX和RX进行了短接,期望模块通过串口输出的数据再完整的通过串口输入。

超时时间这里的单位是什么,是read在这里阻塞,超时时间无数据则返回的意思吗?

我想根据串口收到数据的间隔来进行数据分包,想利用超时时间来实现,应该如何设计?或者是否有其他更好的方式。

,

Kevin Qiu1:

user6491819 说:超时时间这里的单位是什么

单位是 Clock ticks,TI-RTOS中默认是1000us,可以选择 UART_WAIT_FOREVER 值来强制 UART 模块等待传入的数据。

 The UART_write() or UART_read() call will block until all data is sent or received, or the write timeout or read timeout expires, whichever happens first.

user6491819 说:我想根据串口收到数据的间隔来进行数据分包,想利用超时时间来实现,应该如何设计?或者是否有其他更好的方式。

利用超时时间或者帧头帧尾校验的方式都可以实现串口数据分包,设计方式没有具体的说明,需要自己实现

赞(0)
未经允许不得转载:TI中文支持网 » CC3235S: 串口接收和串口发送会有影响?
分享到: 更多 (0)