天嵌 ARM开发社区

 找回密码
 注册
查看: 1688|回复: 1

为什么开发板和PC机的串口就是不能传呢?

[复制链接]
llci 发表于 2009-12-23 21:47:52 | 显示全部楼层 |阅读模式
本帖最后由 llci 于 2009-12-23 21:51 编辑

我又写了两个基于开发板和PC机之间串口数据的收发程序,最简单的程序啊。。。都运行起来了。。。但是数据却传不了。。。到底是为什么呢?
以下分别是我的PC机端的发送程序和ARM板的接受数据程序。。大家帮俺看看是不是程序有问题呀?
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>

int openport(char *Dev)   
{
int fd = open( Dev, O_RDWR|O_NOCTTY|O_NDELAY );
if (-1 == fd)
{   
   perror("Can't Open Serial Port");
   return -1;  
}
else
   return fd;

}

int setport(int fd, int baud,int databits,int stopbits,int parity)
{
int baudrate;
struct   termios   newtio;   
switch(baud)
{
case 300:
   baudrate=B300;
   break;
case 600:
   baudrate=B600;
   break;
case 1200:
   baudrate=B1200;
   break;
case 2400:
   baudrate=B2400;
   break;
case 4800:
   baudrate=B4800;
   break;
case 9600:
   baudrate=B9600;
   break;
case 19200:
   baudrate=B19200;
   break;
case 38400:
   baudrate=B38400;
   break;
case 115200:
   baudrate=B115200;
   break;
default :
   baudrate=B9600;  
   break;
}
tcgetattr(fd,&newtio);     
bzero(&newtio,sizeof(newtio));   
newtio.c_cflag   &=~CSIZE;   
switch(databits)
{   
case 7:  
   newtio.c_cflag |= CS7;
   break;
case 8:     
   newtio.c_cflag |= CS8;
   break;   
default:   
   newtio.c_cflag |= CS8;
   break;   
}
switch (parity)
{   
case 'n':
case 'N':   
   newtio.c_cflag &= ~PARENB;   
   newtio.c_iflag &= ~INPCK;     
   break;
case 'o':   
case 'O':     
   newtio.c_cflag |= (PARODD | PARENB);
   newtio.c_iflag |= INPCK;         
   break;
case 'e':
case 'E':   
   newtio.c_cflag |= PARENB;     
   newtio.c_cflag &= ~PARODD;   
   newtio.c_iflag |= INPCK;      
   break;
case 'S':
case 's':                           
   newtio.c_cflag &= ~PARENB;
   newtio.c_cflag &= ~CSTOPB;
   break;
default:   
   newtio.c_cflag &= ~PARENB;   
   newtio.c_iflag &= ~INPCK;   
   break;   
}
switch (stopbits)
{   
case 1:   
   newtio.c_cflag &= ~CSTOPB;
   break;
case 2:   
   newtio.c_cflag |= CSTOPB;
    break;
default:
   newtio.c_cflag &= ~CSTOPB;
   break;
}
newtio.c_cc[VTIME] = 0;  
newtio.c_cc[VMIN] = 0;
newtio.c_cflag   |=   (CLOCAL|CREAD);
newtio.c_oflag|=OPOST;
newtio.c_iflag   &=~(IXON|IXOFF|IXANY);                     
    cfsetispeed(&newtio,baudrate);   
    cfsetospeed(&newtio,baudrate);   
    tcflush(fd,TCIFLUSH);
if (tcsetattr(fd,TCSANOW,&newtio) != 0)   
{
   perror("SetupSerial 3");
   return -1;
}
return 0;
}


int main()
{
        int fd;
        int num,i,ret,sd;
        char buf[]={"123\n"};
        struct termios options;
        char *dev="/dev/ttyS0";
        fd=openport(dev);

if(fd>0)
{
   ret=setport(fd,115200,8,1,'o');  
   if(ret<0)
   {
    printf("Can't Set Serial Port!\n");
    exit(0);
   }
}
else
{
   printf("Can't Open Serial Port!\n");
   exit(0);
}

while(1) {
printf("I'm ready to send\n");
printf("\n");
sd=write(fd,buf,3);
printf("send number:%d\n",sd);
}
close(fd);
}
上面是PC机端得发送程序,下面是板子上的接收程序
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <termios.h>

int openport(char *Dev)   
{
int fd = open( Dev, O_RDWR|O_NOCTTY|O_NDELAY );
if (-1 == fd)
{   
   perror("Can't Open Serial Port");
   return -1;  
}
else
   return fd;

}

int setport(int fd, int baud,int databits,int stopbits,int parity)
{
int baudrate;
struct   termios   newtio;   
switch(baud)
{
case 300:
   baudrate=B300;
   break;
case 600:
   baudrate=B600;
   break;
case 1200:
   baudrate=B1200;
   break;
case 2400:
   baudrate=B2400;
   break;
case 4800:
   baudrate=B4800;
   break;
case 9600:
   baudrate=B9600;
   break;
case 19200:
   baudrate=B19200;
   break;
case 38400:
   baudrate=B38400;
   break;
case 115200:
   baudrate=B115200;
   break;
default :
   baudrate=B9600;  
   break;
}
tcgetattr(fd,&newtio);     
bzero(&newtio,sizeof(newtio));   
newtio.c_cflag   &=~CSIZE;   
switch(databits)
{   
case 7:  
   newtio.c_cflag |= CS7;
   break;
case 8:     
   newtio.c_cflag |= CS8;
   break;   
default:   
   newtio.c_cflag |= CS8;
   break;   
}
switch (parity)
{   
case 'n':
case 'N':   
   newtio.c_cflag &= ~PARENB;   
   newtio.c_iflag &= ~INPCK;     
   break;
case 'o':   
case 'O':     
   newtio.c_cflag |= (PARODD | PARENB);
   newtio.c_iflag |= INPCK;         
   break;
case 'e':
case 'E':   
   newtio.c_cflag |= PARENB;     
   newtio.c_cflag &= ~PARODD;   
   newtio.c_iflag |= INPCK;      
   break;
case 'S':
case 's':                           
   newtio.c_cflag &= ~PARENB;
   newtio.c_cflag &= ~CSTOPB;
   break;
default:   
   newtio.c_cflag &= ~PARENB;   
   newtio.c_iflag &= ~INPCK;   
   break;   
}
switch (stopbits)
{   
case 1:   
   newtio.c_cflag &= ~CSTOPB;
   break;
case 2:   
   newtio.c_cflag |= CSTOPB;
    break;
default:
   newtio.c_cflag &= ~CSTOPB;
   break;
}
newtio.c_cc[VTIME] = 0;  
newtio.c_cc[VMIN] = 0;
newtio.c_cflag   |=   (CLOCAL|CREAD);
newtio.c_oflag|=OPOST;
newtio.c_iflag   &=~(IXON|IXOFF|IXANY);                     
    cfsetispeed(&newtio,baudrate);   
    cfsetospeed(&newtio,baudrate);   
    tcflush(fd,TCIFLUSH);
if (tcsetattr(fd,TCSANOW,&newtio) != 0)   
{
   perror("SetupSerial 3");
   return -1;
}
return 0;
}


int main()
{
        int fd;
        int num,i,ret,sd;
        char buf[5];
        struct termios options;
        char *dev="/dev/tq2440_serial0";
        fd=openport(dev);

if(fd>0)
{
   ret=setport(fd,115200,8,1,'o');  
   if(ret<0)
   {
    printf("Can't Set Serial Port!\n");
    exit(0);
   }
}
else
{
   printf("Can't Open Serial Port!\n");
   exit(0);
}

while(1){
printf("I'm ready to receive\n");
sd=read(fd,buf,3);
printf("receive number:%d\n",sd);
}
close(fd);
}
以下是运行过程截图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
亚瑟王 发表于 2009-12-25 11:08:42 | 显示全部楼层
什么叫数据传输不了?不太理解你的意思。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-10-6 20:26 , Processed in 1.021524 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表