关于串口接收回调函数的问题
串口使用的是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(¶ms);
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
用的哪个版本的协议栈?