我刚开始编写一个应用程序来通过串口控制SimCOM。但我无法从串口接收数据。这是我的计划。
/*Sending command*/
char cmd[80] = "ATD";
char number[80];
printf("Calling: \n");
printf("Input your phone number:");
scanf("%s",number);
char signal[80]= ";\r\n";
strcat(cmd,number);
strcat(cmd,signal);
printf("%s",cmd);
int nWritten = write(fd, &cmd,sizeof(cmd));
我无法正确读取数据。否则以相同的波特率发送数据是可以的 / 读取数据响应 /
int n = 0;
char buf[1];
char response[256];
do
{
n = read(fd, &buf, 1 );
strcat(response,buf);
}
while( buf[1] != '\r' && n > 0);
printf("%s \n", response);
这是我程序的开放部分
struct termios options;
int fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
if(fd==-1){
printf("Cannot open serial port\n");
}
else printf("Serial port: open.\n");
/*config serial port*/
tcgetattr(fd, &options);
cfsetispeed(&options, B9600);
cfsetospeed(&options, B9600);
options.c_cflag &= ~PARENB; //no parity
options.c_cflag &= ~CSTOPB; //one stop bit
options.c_cflag &= ~CSIZE; // size
options.c_cflag &= CS8; // 8 bit
答案 0 :(得分:0)
您尚未发布程序的open()部分。您不能简单地使用read()从串行端口读取,而无需设置波特率和其他参数。 Here is Linux文档项目中的一个很好的例子,可能会有所帮助