主题 : tiny6410下串口1-2的操作问题求救 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 72249
精华: 0
发帖: 25
金钱: 125 两
威望: 25 点
综合积分: 50 分
注册时间: 2012-06-18
最后登录: 2012-12-19
楼主  发表于: 2012-07-18 17:36

 tiny6410下串口1-2的操作问题求救

自己写的一个简单的串口定时发送一个字符串,同时即时打印出接收到的串口信息的小程序,在开发板的串口0使用是OK的,更改/dev/ttySAC1后到了串口1运行串口就没响应了啊,后来又尝试了串口2也不行,(串口1和串口2测试的时候是额外另接一台PC的超级终端测试的),求解释啊!

程序如下:
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<termios.h>
#include <string.h>
const unsigned char AT[]    ="AT\n";

void set_speed(int,int);
int main()
{
    int fd,flag,wr_num=0,rd_num=0,ret=0,i;
    struct termios term;
    fd_set fdset;
    struct timeval wait_time;
    speed_t baud_rate_i,baud_rate_o;
    char send_buf[]="hello,serial!";
    char recv_buf[20];
    fd=open("/dev/ttySAC0",O_RDWR | O_NONBLOCK);
    if(fd == -1)
    printf("can not open the COM1!\n");
    else
    printf("open COM1 ok!\n");
    set_speed(fd,115200);
    
    while(1)
    {
    FD_ZERO(&fdset);
    FD_SET(fd,&fdset);
    wait_time.tv_sec = 0;
    wait_time.tv_usec = 10000;
    //wr_num=write(fd,send_buf,sizeof(send_buf));
    wr_num=write(fd,AT,sizeof(AT));
    if(wr_num>0)
        printf("write success!\n");
    else
            printf("write fail!\n");
    sleep(1);
    ret = select(fd+1, &fdset, (fd_set *)NULL, (fd_set *)NULL, &wait_time);
    if(ret <=0)
    {
    }
    else
    {
    memset( recv_buf,0,sizeof(recv_buf) );
    rd_num=read(fd,recv_buf,sizeof(recv_buf));
    if(rd_num>0)
        {
        printf("we can read \"%s\" from the COM1.total:%d characters\n",recv_buf,rd_num);
    }
    else
        printf("read fail!\n");
    sleep(2);
    }
    }
}

    int speed_arr[]={B38400,B19200,B9600,B4800,B2400,B1200,B300,B38400,B19200,B9600,B4800,B2400,B1200,B300,};
    int name_arr[]={38400,19200,9600,4800,2400,1200,300,38400,19200,9600,4800,2400,1200,300,};
    void set_speed(int fd,int speed)
    {
    int i;
    int status;
        struct termios Opt;
    tcgetattr(fd,&Opt);
    for(i=0;i<sizeof(speed_arr)/sizeof(int);i++)
    {
        if(speed==name_arr)
        {
        tcflush(fd,TCIOFLUSH);
        cfsetispeed(&Opt,speed_arr);
        cfsetospeed(&Opt,speed_arr);
        status = tcsetattr(fd,TCSANOW,&Opt);
        if(status != 0)
        {
            perror("tcsetattr fd1");
            return;
        }
        tcflush(fd,TCIOFLUSH);            
        }
    }
    }