微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 关于串口接收回调函数的问题

关于串口接收回调函数的问题

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

串口使用的是UART0,串口接收回调函数在NPI_InitTransport(NpiSerialCallback)时注册,现在我通过PC端的串口发送字符串到开发板后,程序会两次进入串口接收回调函数,请问这是怎么回事。多谢

请问您是怎么检测到两次进入接收回调的?字符串有多长?如果只发一个字符是否会有该情况?

我是在回调函数中设置断点来检测的。当字符串长度大于4左右的时候就回出现这种情况,,一个字符的话不会出现。

我在串口回调函数中将窗口数据通过notify发送出去,在lightblue中可以看到串口数据是通过多次notify发送的。

static void NpiSerialCallback( uint8 port, uint8 events )
{
      (void)port;
      uint8 numBytes = 0;
      uint8 buf[20]={0};

       if (events & HAL_UART_RX_TIMEOUT)
       {
               numBytes = NPI_RxBufLen();
               if(numBytes)
               {
                       NPI_ReadTransport(buf,numBytes);
                       SimpleProfile_SetParameter( SIMPLEPROFILE_CHAR7,SIMPLEPROFILE_CHAR7_LEN, buf );
                }
         }
}

调用的方式建议采用TI例程里面的注册方式

UART_Params_init(&params);
params.baudRate = NPI_UART_BR;
params.readDataMode = UART_DATA_BINARY;
params.writeDataMode = UART_DATA_BINARY;
params.dataLength = UART_LEN_8;
params.stopBits = UART_STOP_ONE;
params.readMode = UART_MODE_CALLBACK;
params.writeMode = UART_MODE_CALLBACK;
params.readEcho = UART_ECHO_OFF;

params.readCallback = NPITLUART_readCallBack;
params.writeCallback = NPITLUART_writeCallBack;

Hi WBJ

我用的是CC2540的板子,在串口初始化NPI_InitTransport( npiCBack_t npiCBack )就是采用注册的方式,例程似乎与你的不一样。

CC254x串口使用可以参考这个例程http://processors.wiki.ti.com/index.php/SerialBLEbridge

用的哪个版本的协议栈?

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

网站地图

Top