UART接收BUF可以清空吗?
我回调函数设置了24BYTES时就会进入,然后处理接收到的数据。
为了方便识别,第RX[23]是固定的0XAA , 只有收到RX[23]==0XAA , 才认为接收正确。
现在发现一种情况,就是有时会多收一个BYTE , 这样0XAA就收不到了。 而且0XAA会在永远在下一次24BYTES的第一个BYTE出现,即RX[0]。
我想在 UART_read(handle, RX, 24) 之前做一个清空接收BUF的动作(或超时处理时清空接收BUF) 。
void uart_init(void)
{
。。。。。。
UartParams.readCallback = readCallback;
UartHandle = UART_open(Board_UART, &UartParams);
int rxBytes = UART_read(UartHandle, RX, 24);
}
static void readCallback(UART_Handle handle, void *rxBuf, size_t size)
{
RX_BYTES += size;
//处理
if(RX[23]==0xaa) {
}
UART_read(handle, RX, 24);
}
一般串口buffer是没有清空这个概念的,后一次的数据来了,就会自动覆盖前一次的。你可以加入判断,接收的字节超过23个还没有0xaa,说明数据error,抛弃掉就ok了。
参考它的串口源码,串口读取到read参数最大值时回调一次,或硬件发生超时中断时回调一次。这样你可以在read中将参数设置大些,在整个缓冲区中去寻找你需要的连续数据。