微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > UART接收BUF可以清空吗?

UART接收BUF可以清空吗?

时间:10-02 整理:3721RD 点击:

我回调函数设置了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中将参数设置大些,在整个缓冲区中去寻找你需要的连续数据。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top