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 说:我想根据串口收到数据的间隔来进行数据分包,想利用超时时间来实现,应该如何设计?或者是否有其他更好的方式。
利用超时时间或者帧头帧尾校验的方式都可以实现串口数据分包,设计方式没有具体的说明,需要自己实现