串口写AT命令,读出的怎么是刚才写入的数据

rocky_huang 2013-02-17 04:35:19
今天下午写了一个小的串口读写程序,但是调试的结果竟然是,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);

}
...全文
246 7 点赞 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jinjianxinxh 2014-10-21
https://github.com/jinjianxin/autotools/tree/master/bluehfp 之前在公司没事干写的,应该能用 ,你自己去下载下吧
  • 打赏
  • 举报
回复
hy15051860045 2014-10-21
引用 5 楼 jinjianxinxh 的回复:
哈哈,我之前也弄过这个,我有完整的程序,在github上
能交流一下么?
  • 打赏
  • 举报
回复
MOON20704 2014-10-20
你好,串口通讯往往以\r\n为结束符,之前我也是搞了好久,比如3G拨号上网,加入\r就OK了
  • 打赏
  • 举报
回复
hy15051860045 2014-10-20
你好,我最近也在搞linux的串口通讯,希望与你交流,具体的一个流程是怎么样的,有没有什么推荐的书或帖子啊
  • 打赏
  • 举报
回复
jinjianxinxh 2014-10-20
哈哈,我之前也弄过这个,我有完整的程序,在github上
  • 打赏
  • 举报
回复
rocky_huang 2013-02-18
引用 1 楼 9527 的回复:
关闭设备的回显试试,ATE0\r\n
我写入的AT命令没有\r\n,加上之后就ok了
  • 打赏
  • 举报
回复
9527 2013-02-17
关闭设备的回显试试,ATE0\r\n
  • 打赏
  • 举报
回复
相关推荐
发帖
Linux/Unix社区
加入

2.1w+

社区成员

Linux/Unix社区 应用程序开发区
申请成为版主
帖子事件
创建了帖子
2013-02-17 04:35
社区公告
暂无公告