TI中文支持网
TI专业的中文技术问题搜集分享网站

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);
}

xyz549040622:

一般串口buffer是没有清空这个概念的,后一次的数据来了,就会自动覆盖前一次的。你可以加入判断,接收的字节超过23个还没有0xaa,说明数据error,抛弃掉就ok了。

user4587069:

回复 xyz549040622:

参考它的串口源码,串口读取到read参数最大值时回调一次,或硬件发生超时中断时回调一次。这样你可以在read中将参数设置大些,在整个缓冲区中去寻找你需要的连续数据。

赞(0)
未经允许不得转载:TI中文支持网 » UART接收BUF可以清空吗?
分享到: 更多 (0)