Quantcast
Channel: 蓝牙论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 7485

CC2540蓝牙协议栈串口接收数据并通过广播方式发送到主机时,出现乱码,怎么解决?

$
0
0

 2540SmartRF开发板与电脑串口相连作为蓝牙从机,手机作为蓝牙主机。利用串口助手向开发板发送数据时,通过回调函数NpiSerialCallback(uint8 port,uint8 events)里的函数NPI_ReadTransport(buf,numBytes)接收数据,并马上通过函数NPI_WriteTransport(buf,numBytes)发送到串口,数据较少时,不会乱码,几十个字节的时候就会经常出现乱码!!!这是什么情况?在网上看到很多人反应了这个问题,都没有解决。

在preprocessing 里面把POWER_SAVING关闭了,把HCI_EXT_ClkDivOnHaltCmd( HCI_EXT_ENABLE_CLK_DIVIDE_ON_HALT );屏蔽了,都没有用!

还有将收到的数据通过函数SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR6,SIMPLEPROFILE_CHAR6_LEN,buffer);传输到手机,修改特征值char6,每次发6个数,每次只能收到1个或者3个的数,经常是乱的。波特率默认为115200,修改为9600都没用。以下 是我的串口回调函数里的处理。

断点测试发现接收多少个字节,就进入回调函数多少次,但是每次接收的字节数是不定的,有时2个,有时4个,有时1个、、、、

问:如何保证一次接收完所有数据后再轮询其他任务呢??

static void NpiSerialCallback(uint8 port,uint8 events)
{
(void)port;
uint8 numBytes=0;
uint8 buf[6];
if(events & HAL_UART_RX_TIMEOUT)
{
numBytes=NPI_RxBufLen();
   if(numBytes)
   {

    NPI_ReadTransport(buf,numBytes); //从串口读出数据
    SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR6,SIMPLEPROFILE_CHAR6_LEN,buf);

    }


  }

}


Viewing all articles
Browse latest Browse all 7485

Trending Articles