微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > cc2540 uart接收数据问题

cc2540 uart接收数据问题

时间:10-02 整理:3721RD 点击:

请问,我调试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层作处理。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top