//data head
if(cntUsart1Rx < 2) //data head 0XAA
{
buffUsart1Rx[cntUsart1Rx++] = regDataUsart1Rx; //cntUsart1Rx是我定义的全局变量,这段处理过程是 HAL_UART_RxCpltCallback,目前可以进中断,但是 死活接收不到一段完整的数据帧,请大家看看这段有什么问题没,谢谢了、
if(cntUsart1Rx == 2)
{
if((buffUsart1Rx[0] != 0xAA) || (buffUsart1Rx[1] != 0x55))
{
cntUsart1Rx = 0; //重新接收
HAL_UART_Receive_IT(&huart1,®DataUsart1Rx,1);
}
}
}
//cmd & length
else if(cntUsart1Rx < 4)
{
buffUsart1Rx[cntUsart1Rx++] = regDataUsart1Rx;
if(cntUsart1Rx == 4)
{
if(buffUsart1Rx[3] < 235)
{
dataLength = buffUsart1Rx[3] + 5;
}
else
{
cntUsart1Rx = 0; //exception handling
HAL_UART_Receive_IT(&huart1,®DataUsart1Rx,1);
}
}
}
//data & checksum
else if(cntUsart1Rx >= 4)
{
buffUsart1Rx[cntUsart1Rx++] = regDataUsart1Rx;
if(cntUsart1Rx >= dataLength)
{
cntUsart1Rx = 0;
buffUsart1RxComplete = 1; //接收完成标志
HAL_UART_Receive_IT(&huart1,®DataUsart1Rx,1);
}
}
}
一周热门 更多>