tq2440开发板串口读写有关问题,各位请进,待

tq2440开发板串口读写问题,各位请进,在线等待
用串口线 pc机连接tc35开发板,使用虚拟机Linux,执行下列程序,能够成功打电话
可是用我的tq2440连接tc35开发板,写入数据却读不出来,也不能打电话,请各位大侠指点

C/C++ code

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <error.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdlib.h>

int fd;

/*
 * 打开串口1
 */
int open_ttyS0()
{
    //O_RDWR:以读写的方式打开设备
    //O_NOCTTY:如果欲打开的文件为终端设备时,则不会将该终端当成当前进程控制终端
    //O_NDELAY:以不可阻断的方式打开文件,即无论有无数据读取或等待,都会立即返回进程之中
    
    //fd = open("/dev/ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); //虚拟机Linux测试
    fd = open("/dev/tq2440_serial0", O_RDWR | O_NOCTTY | O_NDELAY); //tq2440 Linux测试
    
printf("\nfd = %d\n\n", fd);
    
    if(fd < 0) //打开失败
    {
        return -1;
    }

    //恢复串口为阻塞状态
    if(fcntl(fd, F_SETFL, 0) < 0) //F_SETFL:改变open设置的标志
    {
        close(fd);
        
        return -2;
    }
    
    //测试是否为终端设备
    if(0 == isatty(fd)) //isatty:检查设备类型
    {
        close(fd);
        
        return -3;
    }

    return fd;
}

/*
 * 设置串口1,共9步
 * 数据位:8
 * 校验位:无
 * 波特率:115200
 * 停止位:1
 */
int set_ttyS0()
{
    struct termios newtio, oldtio;
    
    //1、保存原有串口配置
    if(tcgetattr(fd, &oldtio) != 0)
    {
        return -1;
    }
    
    //2、激活本地连接和接受使能
    bzero(&newtio, sizeof(newtio)); //使用之前先清空
    newtio.c_cflag |= CLOCAL | CREAD;
    
    //3、设置字符大小
    newtio.c_cflag &= ~CSIZE; //除去数据位中的位掩码
    newtio.c_cflag |= CS8;    //设置数据位
    
    //4、设置奇偶校验位:无奇偶校验位
    newtio.c_cflag &= ~PARENB; //激活校验位使能标志
    
    //5、设置波特率
    cfsetispeed(&newtio, B115200);
    cfsetospeed(&newtio, B115200);
    
    //6、设置停止位:1
    newtio.c_cflag &= ~CSTOPB;
    
    //7、设置等待时间和最小接收字符
    newtio.c_cc[VTIME] = 0;
    newtio.c_cc[VMIN] = 0;
    
    //8、处理要写入的引用对象
    tcflush(fd, TCIFLUSH); //处理未接收字符串,TCIFLUSH:刷新收到的数据但不读
    
    //9、激活新配置
    if(tcsetattr(fd, TCSANOW, &newtio) != 0) //TCSANOW:改变的配置立即生效
    {
        return -2;
    }
    
    return 0;
}

int main()
{
    char cmd[] = "ATD 15954179972;\r";
    
    open_ttyS0();
    set_ttyS0();
    
    printf("write: %d\n", write(fd, cmd, sizeof(cmd)));
    sleep(2);
    printf("read: %d\n", read(fd, cmd, sizeof(cmd)));
    
    return 0;
}



在tc35和pc机相连的时候执行成功,如下图

但是tc35和tq2440开发板相连的时候就出现问题了,如下图


------解决方案--------------------
你的串口线必须是交叉的,连在电脑上的线是串口延长线