微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > CC2540蓝牙协议栈串口接收数据并通过广播方式发送到主机时,出现乱码,怎么解决?

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

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

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

    }


  }

}

可以考虑用串口中断接收。

现在没有办法直接从串口接收后,同时进行处理,只能确定接收的字节数,然后通过软件设置,收到多少个字节后一起进行处理。因为采用回调函数的方式接收数据,每次接收的字节数都是不确定的,如果收到就发出去,会出现数据不连续的情况。

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

网站地图

Top