串口写AT命令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
#include
int fd;
int open_uart()
{
fd = open("/dev/ttyUSB2", O_RDWR|O_NOCTTY|O_NDELAY);
if(fd == -1)
{
perror("open tty fail");
return -1;
}
if(fcntl(fd, F_SETFL, 0)<0)
{
perror("open , fcntl fail");
return -1;
}
// printf("fcntl=%d\n", fcntl(fd, F_SETFL, 0));
// printf("fd is %d\n", fd);
/*
if(isatty(STDIN_FILENO))
{
printf("is a tty\n");
}
else
{
printf("not tty\n");
}
*/
return 0;
}
int set_uart()
{
struct termios options;
if(tcgetattr(fd, &options) != 0)
{
perror("get uart attr fail\n");
return -1;
}
cfsetispeed(&options, B19200);
cfsetospeed(&options, B19200);
options.c_cflag |= CLOCAL|CREAD;
options.c_cflag &= ~CRTSCTS;
options.c_cflag &= ~CSIZE;
options.c_cflag |= CS8;
options.c_cflag &= ~PARENB;
options.c_iflag &= ~INPCK;
options.c_cflag &= ~CSTOPB;
options.c_oflag &= ~OPOST;
options.c_cc[VTIME] = 1;
options.c_cc[VMIN] = 1;
tcflush(fd, TCIOFLUSH);
if(tcsetattr(fd, TCSANOW, &options) != 0)
{
perror("uart set attr fail");
return -1;
}
return 0;
}
int read_uart()
{
fd_set fs_read;
struct timeval time;
FD_ZERO(&fs_read);
FD_SET(fd, &fs_read);
_sec = 10;
_usec = 0;
while(select(fd+1, &fs_read, 0, 0, &time) > 0)
{
int len;
char buf[1024];
len=read(fd, buf, sizeof(buf));
printf("%s", buf);
}
}
int send_uart(char *str)
{
printf("send cmd:\t%s\n", str);
write(fd, str, strlen(str));
return 0;
}
int cmd_uart(char *str)
{
send_uart(str);
read_uart();
}
int main(int argc, char **argv)
{
char cmd_buf[1024];
open_uart();
set_uart();
cmd_uart("ate\r\n");
cmd_uart("ati\r\n");
cmd_uart("at+cimi\r\n");
cmd_uart("at+cmee=2\r\n");
cmd_uart("at+csq\r\n");
cmd_uart("at+creg=1\r\n");
cmd_uart("at+creg=?\r\n");
cmd_uart("at+creg?\r\n");
cmd_uart("at+cops?\r\n");
cmd_uart("at^hcsq\r\n");
cmd_uart("ag+cgdcont=1,\"ip\",\"3gnet\"\r\n");
while(fgets(cmd_buf, sizeof(cmd_buf), stdin))
{
strcat(cmd_buf, "\r\n");
cmd_uart(cmd_buf);
}
close(fd);
return 0;
}