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);
}
}
}