免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2791 | 回复: 0
打印 上一主题 下一主题

[操作系统] 串口怎么设置成红外模块 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-14 15:55 |只看该作者 |倒序浏览
三星2410的开发板 做一个linux项目,用了一块3根线的红外模块,不知道什么名字.怎么设置串口呢 我用的是串口1。我把控制寄存器改成红外模式.然后写了一个串口应用,把波特率设置成38400。想通过串口1的文件描述符来读取红外发过来的数据.但是一直按控制按钮.通过示波器能看到红外模块的数据线有波形.但是应用却读不到数据.
   串口应该怎么设置呢.还有红外模块的波形是 3个字节的 开始时00FF 然后就是脉冲的波形.1.13ms的脉冲标识表示 0 2.25ms的脉冲表示 1 .
    我的应用程序 #include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
#include<termios.h>



int speed_arr[] = {B115200,B38400, B19200, B9600, B4800, B2400, B1200, B300 };

int name_arr[] = {115200,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[i])
        {   
            tcflush(fd, TCIOFLUSH);
            cfsetispeed(&Opt, speed_arr[i]);
            cfsetospeed(&Opt, speed_arr[i]);
            status = tcsetattr(fd, TCSANOW, &Opt);
           
            if (status != 0)
            {  
                perror("tcsetattr fd1 error");
                return;   
            }
            else
            {
                printf("set fd1 ok \n");
            }
           
            tcflush(fd,TCIOFLUSH);
            }
    }
}

int main()
{
   
    int fd,flag,wr_num=0,rd_num=0;
    struct termios term;
    speed_t baud_rate_i,baud_rate_o,baud_rate_a,baud_rate_b;   
    char send_buf[]="hello,serial!",recv_buf[20];
   
    fd=open("/dev/s3c2410_serial1",O_RDWR|O_NONBLOCK);
    if(fd==-1)    //error
        printf("can not open the ttyUSB0!\n");
    else    //ok
        printf("open USB-Serial ttyUSB0 ok!\n");
      
    flag=tcgetattr(fd,&term);
    baud_rate_i=cfgetispeed(&term);
    baud_rate_o=cfgetospeed(&term);
    printf("baudrate of in is:%d,baudrate of out is%d,fd=%d\n",baud_rate_i,baud_rate_o,fd);
   
    set_speed(fd,38400);

    flag=tcgetattr(fd,&term);
    baud_rate_a=cfgetispeed(&term);
    baud_rate_b=cfgetospeed(&term);
    printf("baudrate of in is:%d,baudrate of out is%d,fd=%d,flag=%d\n,",baud_rate_a,baud_rate_b,fd,flag);
    while(1)
    {
        wr_num=write(fd,send_buf,sizeof(send_buf));
        if(wr_num>0)
            printf("write ttyUSB0 success!\n");
        else
            printf("write ttyUSB0 fail!\n");
        sleep(1);
        rd_num=read(fd,recv_buf,sizeof(recv_buf));
        if(rd_num>0)
            printf("we can read \"%s\" from the ttyUSB0.total:%d characters\n",recv_buf,rd_num);
        else
            printf("read ttyUSB0 fail!\n");
        sleep(1);
    }
}
  驱动程序就是2410的串口1 驱动

  跪求大神 怎么设置串口,通过应用能接受红外模块的数据 啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP