cc2540 uart接收数据问题
请问,我调试uart时候,使用调试助手发送数据,然后调用接口Hal_UART_RxBufLen时返回的数据不是完整的数据,相当于被拆包了呢?谢谢。
uart数据回调函数:
if( (numBytes = Hal_UART_RxBufLen(port)) > 0 )
{
HalUARTRead (port, pktBuffer, numBytes);
HalUARTWrite(port,pktBuffer,numBytes);
CommondHandle(pktBuffer, numBytes);
}
回调函数调用后需等待一小段时间,你加个延时试试?
不行,数据还是分段。
我也遇到了这个问题,请问有什么好的解决办法呢? 这里留下我的邮箱542647594@qq.com,后面有同学遇到问题可以一起交流啊~
我也遇到这个问题啊
numByte = NPI_RxBufLen();
if( (numBytes)
{
NPI_ReadTransport(buf,numByte);
NPI_WriteTransport(buf,numByte);
NPI_WriteTransport("#",1);
}
PC发送给CC2540的数据是:123456789
结果打印出来的是:12#34#56#789#
类似这样的问题,想知道大家是什么解决的?
楼上有说加个延时,您可以试试呐,,,
count =0xffff;
while(count--);
真的行么?
static void HalUARTPollDMA(void)函数中,
if (cnt >= HAL_UART_DMA_FULL)
{
evt = HAL_UART_RX_FULL;
}
else if (cnt >= HAL_UART_DMA_HIGH)
{
evt = HAL_UART_RX_ABOUT_FULL;
PxOUT |= HAL_UART_Px_RTS;
}
else if (cnt && !dmaCfg.rxTick)
{
evt = HAL_UART_RX_TIMEOUT;
}
if (dmaCfg.txMT)
{
dmaCfg.txMT = FALSE;
evt |= HAL_UART_TX_EMPTY;
}
上面这段函数控制的是收到多少字节,触发事件,然后调用回调函数
我是想问, CC2540串口收到的数据总是被拆分了, 就是分包了, 好像就是readRxLen 这个获取的结果不正确所造成的
其实这是正常的,我觉得没必要去等它一包数据都收完了再去读。
DMA默认是有数据就通知顶层,而此时往往还有数据未传输完,所以读到的就不完全,自己编程分包接收数据就行了,尽量不要去修改底层。
最好不要加延时,我的做法是在那边做一个缓存,然后数据来了就先放到缓存里,然后提取到一帧了我把数据发到gatt层作处理。