linux命令读取串口 linux 读串口

linux怎么读取串口数据

#includestdio.h

创新互联成立于2013年,先为孟连等服务建站,孟连等地企业,进行企业商务咨询服务。为孟连企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

#includestdlib.h

#includeunistd.h

#includesys/types.h

#includesys/stat.h

#includefcntl.h

#includetermios.h

#includeerrno.h

#define FALSE -1

#define TRUE 0

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[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");  

return;     

}    

tcflush(fd,TCIOFLUSH);   

}  

}

}

int set_Parity(int fd,int databits,int stopbits,int parity)

struct termios options; 

if  ( tcgetattr( fd,options)  !=  0) { 

perror("SetupSerial 1");     

return(FALSE);  

}

options.c_cflag = ~CSIZE; 

switch (databits) 

{   

case 7:

options.c_cflag |= CS7; 

break;

case 8:     

options.c_cflag |= CS8;

break;   

default:    

fprintf(stderr,"Unsupported data size\n"); return (FALSE);  

}

switch (parity) 

{   

case 'n':

case 'N':    

options.c_cflag = ~PARENB;   /* Clear parity enable */

options.c_iflag = ~INPCK;     /* Enable parity checking */ 

break;  

case 'o':   

case 'O':     

options.c_cflag |= (PARODD | PARENB); 

options.c_iflag |= INPCK;             /* Disnable parity checking */ 

break;  

case 'e':  

case 'E':   

options.c_cflag |= PARENB;     /* Enable parity */    

options.c_cflag = ~PARODD;    

options.c_iflag |= INPCK;       /* Disnable parity checking */

break;

case 'S': 

case 's':  /*as no parity*/   

options.c_cflag = ~PARENB;

options.c_cflag = ~CSTOPB;break;  

default:   

fprintf(stderr,"Unsupported parity\n");    

return (FALSE);  

}  

switch (stopbits)

{   

case 1:    

options.c_cflag = ~CSTOPB;  

break;  

case 2:    

options.c_cflag |= CSTOPB;  

   break;

default:    

 fprintf(stderr,"Unsupported stop bits\n");  

 return (FALSE); 

/* Set input parity option */ 

if (parity != 'n')   

options.c_iflag |= INPCK; 

tcflush(fd,TCIFLUSH);

options.c_cc[VTIME] = 150; 

options.c_cc[VMIN] = 0; /* Update the options and do it NOW */

if (tcsetattr(fd,TCSANOW,options) != 0)   

perror("SetupSerial 3");   

return (FALSE);  

return (TRUE);  

}

int main()

{

printf("This program updates last time at %s   %s\n",__TIME__,__DATE__);

printf("STDIO COM1\n");

int fd;

fd = open("/dev/ttyS0",O_RDWR);

if(fd == -1)

{

perror("serialport error\n");

}

else

{

printf("open ");

printf("%s",ttyname(fd));

printf(" succesfully\n");

}

set_speed(fd,115200);

if (set_Parity(fd,8,1,'N') == FALSE)  {

printf("Set Parity Error\n");

exit (0);

}

char buf[] = "fe55aa07bc010203040506073d";

write(fd,buf,26);

char buff[512];

int nread;

while(1)

{

if((nread = read(fd, buff, 512))0)

{

printf("\nLen: %d\n",nread);

buff[nread+1] = '\0';

printf("%s",buff);

}

}

close(fd);

return 0;

}

如何查看linux下串口是否可用?串口名称等?

1、查看串口是否可用,可以对串口发送数据比如对com1口,echo lyjie126 /dev/ttyS0

2、查看串口名称使用  ls   -l  /dev/ttyS* 一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS* ,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的;

3、查看串口驱动:cat /proc/tty/drivers/serial

4、查看串口设备:dmesg | grep ttyS*

Linux串口相关的操作及绑定

@ toc

可在控制台输入

也可以用stty设置串口参数

使用后相当于串口回传,发什么回什么

发送数据

可以对串口发送数据比如对com1口

一般情况下串口的名称全部在dev下面,如果你没有外插串口卡的话默认是dev下的ttyS* ,一般ttyS0对应com1,ttyS1对应com2,当然也不一定是必然的;

如果有ttyS设备,再看/dev/有没有ttyS*,如没有就建立一个:

如果板子的设备中没有标准串口设备ttyS0,也没有ttySAC0。/dev下应该有一个USB串口:/dev/ttyUSB0.

当一个串行卡或数据卡被侦测到时,它会被指定成为第一个可用的串行设备。通常是/dev/ttyS1(cua1)或/dev/ttyS2(cua2),这完成看原已内建的串口数目。ttyS*设备会被报告在/var/run/stab内。

PC上的串口一般是ttyS,板子上Linux的串口一般叫做ttySAC

可能是linux下的串口设备没有打开,需要改变串口设备

的权限,或者根据文章头添加用户到组处理

可以通过以下命令 查看 板子上的硬件端口的内核设备名

该条命令会将 ttyUSB0所对应的硬件端口的kernel设备名 显现出来, 得到KERNEL== '1-5.5.4', 而不是之前的ttyUSB0

cmd.sh如下:

./getUSB.py 调用当前路径下的getUSB.py这个Python语言,明确此次是哪个,ttyUSB0,或者ttyUSB1挂载在端口3-1.1上

getUSB.py:

完成之后 ,设置开机启动cmd.sh(在/etc/rc.local中设置)则每次开机之后,会从/dev/ttydata获取到固定端口的数据

方式一

写入内容如下:

方式二

我的硬件序列号:ATTRS{serial}=="FTSYWCXZ"这个号是唯一的

可以通过/dev/usb_0打开串口设备

常用的匹配类型:


当前文章:linux命令读取串口 linux 读串口
本文网址:http://scyanting.com/article/dospggd.html