串口同时收发数据,发送数据没有问题,接收数据的时候发现有的时候会收不到,进入Debug调试查看缓存,发现会收到一个字节,然后下一个字节会接着在缓存第二位继续填充。利用memset清空缓存、清除了标志位,发现还是偶尔会出现这个Bug,有哪位大神知道是为啥?
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART6)
{
if(0==rxIndex)
{
memset(rxBuffer, 0, BUFFER_SIZE);
}
if((rxIndex&0x8000)==0)
{
if(rxIndex & 0x4000)
{
if(rxData[0] != 0x0A)
{
rxIndex = 0;
}
else
{
rxIndex |= 0x8000;
}
}
else
{
if(rxData[0] == 0x0D)
{
rxIndex |= 0x4000;
}
else
{
rxBuffer[rxIndex & 0X3FFF] = rxData[0] ;
rxIndex++;
if(rxIndex > (BUFFER_SIZE - 1))
{
rxIndex = 0;
}
}
}
}
if(HAL_UART_Receive_IT(&huart6,(uint8_t*)&rxData,RXBUFFERSIZE)!= HAL_OK)
{
if(HAL_UART_Receive_IT(&huart6,(uint8_t*)&rxData,RXBUFFERSIZE)==HAL_BUSY)
{
__HAL_UNLOCK(&huart6);
huart6.RxState= HAL_UART_STATE_READY;
}
__HAL_UART_ENABLE_IT(&huart6,UART_IT_ERR);
}
if(__HAL_UART_GET_FLAG(&huart6, UART_FLAG_ORE) != RESET)
{
uint8_t data = (uint8_t)(huart6.Instance->RDR);
__HAL_UART_CLEAR_FLAG(&huart6, UART_FLAG_ORE);
}
HAL_UART_Receive_IT(&huart6,(uint8_t*)&rxData,RXBUFFERSIZE);
}