Other Parts Discussed in Thread:CC3220SF
你好,当我使用Uart_read 读取串口数据,每次读取1024个数据(实际串口只有发送了200个数据),用逻辑分析仪测得,每次CC3220SF这边接收到8个字节的数据后就会把流控拉高(CC3220SF使用了流控,当RX忙的时候会把引脚拉高),然后后面就没有传输数据了。所以我想请问下,关于UART_read与 UART_write API中的 size :
@param size The number of bytes in the buffer that should be written
* to the UART
有没有最大长度限制,即单次收发有没有上限
Viki Shi:
你的buffer设置为多大?
,
user6458813:
buff设置为1460
,
user6458813:
数据类型为unsigned char
,
user6458813:
我想通过UART来接收数据,但是数据长度不一,只能说最大不超过1024,但最小可能只有1字节。而UART_read这个API里面有规定说接收的长度,这样做的结果是,假设我接收大小设置为50字节,而前几次只发送1字节的数据,这会导致串口只有收到50字节数据才会返回,这样导致数据无法及时收到
,
Viki Shi:
建议参考下SDK里的UART例程
,
Viki Shi:
传输不定长度的数据请看如下类似问题:
e2e.ti.com/…/658252
,
user6458813:
SDK里的例程也只是设置接收固定长度的,然后查阅你发的连接里面的情况与我类似,但是工程师给出的答复是使用UART DMA来完成,但是在当前版本的uart API里已经使用了DMA。我觉得你给的连接里没有能解决我当前的问题
,
user6458813:
请问下,UART_readCancel这个API,文档里说 UART_readCancel() calls the registered RX callback function no matter how many bytes were received,意思是说如果我取消本次UART read的传输,那么这个API会调用callback函数?
,
Viki Shi:
如果调用 UART_readCancel() 时,确实有收到数据(readSize> 0)时才调用回调。 如果readSize = 0 ,则不调用回调,直接返回
,
user6458813:
那请问下,我将uart_read定义为收到50个字节就返回,然后我使用串口通过流控与CC3220SF相连,向CC3220SF发送108个字节,然后收到100个字节(2次uart_read的时)我延时20ms后启动 UART_readCancel(),;发现没有调用到回调函数,并且缓冲数组打印出来都为0;再次发送相同的数据,发现前面的8个字节跟着新发来的数据一起发送给我了,请问这是怎么回事?如果可以,请您复现一下:
很简单,找一个uart callback的demo,设置成回调模式,uart_read设置成接收50个字符,然后您可以发送108个字节,并在100个字节后使用UART_readCancel,然后再次发送相同的数据,你会发现新发送的数据头跟着上次未发送的数据,而调用UART_readCancel后并未启动回调函数
,
Viki Shi:
这个问题我需要跟driver开发工程师讨论一下,有后续会来回复
,
Viki Shi:
uart_read需要读第三次,才能获取那8个字节。
否则程序中没有正在进行中的uart_read去cancel,只调用 UART_readCancel() 不会触发回调函数。
TI中文支持网
