arduino怎么清空串口缓存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了arduino怎么清空串口缓存相关的知识,希望对你有一定的参考价值。

参考技术A while(Serial.read()>0);

arduino串口接收的问题

我用auduino的串口向人机界面发送了16进制数据串,例如: 发送【 01 3E 00 88 A3】 人机界面马上会返回一串16进制数 【01 3E 04 23 32 2E 87 EF A4】 ,所以发送完数据后需要马上开始接收,怎么写程序能不漏掉数据,怎么样能够及时准确的接收数据,接收到以后需要把它存在数组中再判断或提取数据
/*********************************** 下面是串口发送16进制串的函数 *******************************************/
void UART_SendPacked(unsigned char Command,unsigned char *p,unsigned char num)

unsigned char Index=0;
unsigned char check=0;
while(UART_TX_Status==1);//等待串口空闲
UART_TX_Status = 1;//,串口忙标志置1,开始新一轮传输
Serial.flush();//Clear serial_buf

UART_TX_Buffer[Index++] = 0x55; //UART_TX_Buffer[0]=Command;命令1字节
UART_TX_Buffer[Index++] = num+1; //UART_TX_Buffer[1]=num+1; 长度1字节
UART_TX_Buffer[Index++] = Command; //校验=命令+数据(num+1字节)和取低8位
check = Command;
while(num--) //计算校验值(在Command基础上继续累加num个数据)得到校验原值

UART_TX_Buffer[Index++] = *p;
check += *p++;

UART_TX_Buffer[Index++] = check;// 校验原值的低8位【1个字节】作为校验值
UART_TX_Buffer[Index++] = 0xaa;//结束标志:0xAA

UART_TX_Number = Index;//所有数据已写入数组中,得到数组长度

Serial.write(UART_TX_Buffer,UART_TX_Number);
UART_TX_Status=0;

/* 例如,执行下面函数会发送16进制串,屏幕收到后会进入休眠,并返回一串16进制数给arduino */
void LCDSetWaitMode(void)//一级休眠

Send_Buffer[0] = 0xa5;
UART_SendPacked(0x8c,Send_Buffer,1);

/*然后就是怎么接收返回的16进制串的问题,我是这样写的,但是不放心,觉得不靠谱,还请大家帮忙*/
// 分数不够了,大家谅解一下,感谢!
void rev(int num_rev)


Serial.flush(); //清空串口缓存区
while(Serial.read() >= 0); //这句好像也是可以清空串口缓存区,好像用上面那句的话有时候会有旧数 据,不能全部替换为新数据,前几天遇到过这个问题,很奇怪。

if(Serial.available())

Receive_Buffer[cc++]=Serial.read();

if(cc>num_rev)

Serial.write(Receive_Buffer,cc);
cc=0;

参考技术A 我建议用串行中断子程序,基本不会错.
void serialEvent()
//statements
int inByte = Serial.read();
Serial.write(inByte);


这个函数错误很小追问

serial.event() 是中断方式接收数据吗? 就是我不用在主程序中写接收函数了,只要判断自定义的那个数组中的数据就行?

我是16进制数,那串口的中断是怎么触发的,是来一个字节的起始位,触发一次中断,接收一个完字节后,存入缓冲区,avalible()++,然后才进入void event()函数吗?我是这样理解的不知道是不是对

追答

来数据就执行中断程序,你中断里读数据,读完后清除缓存,这就基本不会错。很问题屡试不爽!

本回答被提问者采纳

以上是关于arduino怎么清空串口缓存的主要内容,如果未能解决你的问题,请参考以下文章

Arduino串口读取

arduino_1.0.1的串口监视器怎么用

arduino_1.0.1的串口监视器应该怎么用?

arduino串口监视器怎么输入

arduino串口接收的问题

我想用arduino leonardo的串口即0脚和1脚连接XBEE传输数据,并由电脑接收,请问应该怎么实现。