使用TQ2440的板子使用串口和GPRS模块通讯不能发送成功。单独使用串口调试助手和SIM300可以使用,但是用TQ2440就不能使用。
下面是源代码:- #include<stdio.h>
- #include<string.h>
- #include<sys/types.h>
- #include<sys/stat.h>
- #include<errno.h>
- #include<fcntl.h>
- #include<termios.h>
- int fd;
- int open_ser()
- {
- fd=open("/dev/tq2440_serial0",O_RDWR|O_NOCTTY|O_NDELAY);
-
- printf("\nfd=%d\n",fd);
- if(fd<0)
- {
- return -1;
- }
-
- if(fcntl(fd,F_SETFL,0)<0)
- {
- close(fd);
- return -2;
- }
-
- if(0==isatty(fd))
- {
- close(fd);
- return -3;
- }
-
- return fd;
- }
- int set_ser()
- {
- struct termios new_tio,old_tio;
- if(0!=tcgetattr(fd,&old_tio))
- {
- return -1;
- }
-
- new_tio=old_tio;
- //set
- new_tio.c_cflag |= CLOCAL |CREAD;
-
- new_tio.c_cflag &= ~CSIZE;
- new_tio.c_cflag |= CS8;
- new_tio.c_cflag &= ~PARENB;
- cfsetispeed(&new_tio,B9600);
- cfsetospeed(&new_tio,B9600);
- new_tio.c_cflag &= ~CSTOPB;
-
- new_tio.c_cc[VTIME]=0;
- new_tio.c_cc[VMIN]=0;
-
- tcflush(fd,TCIFLUSH);
-
- if(tcsetattr(fd,TCSANOW,&new_tio)!=0)
- {
- return -2;
- }
- return 0;
- }
- int main()
- {
- char cmd[]="ATD 18970952960;\r";
-
- open_ser();
- set_ser();
- printf("\nwrite:%d\n",write(fd,cmd,sizeof(cmd)));
- sleep(2);
- printf("\nread:%d\n",read(fd,cmd,sizeof(cmd)));
- return 0;
- }
复制代码 板子返回的是:
fd=10
write:18
read:0
1.dev换成serial0,serial1,serial2都没用。
2.波特率9600和115200也都没有用。
求教串口出了什么问题 |