串口写AT命令,读出的怎么是刚才写入的数据
今天下午写了一个小的串口读写程序,但是调试的结果竟然是,write一个AT,read到的竟然也是AT,写其他的数据也是一样,读到的都是同样的数据,同志们帮我看看什么问题?
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdlib.h>
#include <termios.h>
#include <sys/select.h>
#include <sys/time.h>
int main(int argc, char *grgv[])
{
char serial[15];
char pwd[20]="/dev/";
char write_data[100]={0};
char read_data[100]={0};
char read_data_buffer[100]={0};
int write_n = 0;
int read_n = 0;
int baud_rate=9600,data_bits=8,stop_bits=1,parity=0;
int serial_fd = -1;
fd_set readfds;
struct timeval tv;
int nfds;
printf("COM is : ");
scanf("%s",serial);
printf("Input COM configure parameters like 9600,8,1,0 \n");
printf("baudrate:9600\n");
printf("data bit:8\n");
printf("stop bit:1\n");
printf("parity:NONE\n");
printf("\n\n");
printf("data bit only use 5,6,7,8\n");
printf("stop bit only use 1,1.5,2\n");
printf("parity :0:NONE; 1:Even parity; 2:Edd parity;\n ");
printf("\n\n");
printf("Input COM configure parameters:\n");
scanf("%d,%d,%d,%d",&baud_rate,&data_bits,&stop_bits,&parity);
strcat(pwd,serial);
printf("serial pwd is %s",pwd);
serial_fd = open_port(pwd);
if(serial_fd < 0)
{
printf("open COM failure\n");
close(serial_fd);
exit(1);
}
printf("Open COM %s success\n",pwd);
set_port(serial_fd, baud_rate, data_bits, stop_bits, parity, 0);
while(1)
{
printf("Input data:");
scanf("%s",write_data);
write_n = write(serial_fd,write_data,strlen(write_data));
if(write_n < strlen(write_data))
{
printf("write data < disered\n");
}
sleep(3);
while(1)
{
tv.tv_sec = 2;
tv.tv_usec = 0;
FD_ZERO(&readfds);
FD_SET(serial_fd,&readfds);
nfds = select(serial_fd+1, &readfds, NULL, NULL, &tv);
if(nfds <=0)
{
break; // time out ,no data
}
else
{
read_n = read(serial_fd,read_data_buffer,100);
if(read_n < 0)
{
printf("Read Com failure!!!!!!\n");
break;
}
printf("read_data_buffer:%s",read_data_buffer);
strcat(read_data,read_data_buffer);
memset(read_data_buffer,0,100);
}
}
printf("Output data:%s\n",read_data);
memset(read_data,0,100);
nfds = -1;
read_n = -1;
}
close(serial_fd);
exit(0);
}