快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

linux读取串口命令 linux 串口read

linux怎么读取串口数据

#includestdio.h

创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于网站设计制作、成都做网站、钟山网络推广、小程序定制开发、钟山网络营销、钟山企业策划、钟山品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供钟山建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

#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*。

扩展资料

串口控制器顾名思义,就是可通过串口实现控制功能的一台控制器。即由上位机通过串口发送特定协议格式的指令给控制器,进而来控制外围设备或器件,也叫单片机串口控制器。

串口控制器就是1台写入了串口通信程序的单片机控制器,有2种工作模式:

1)上位机监控模式:可由上位机串口控制,实现串口监控;

2)脱机控制模式:在通过上位机设置好相关参数后,也可脱离上位机进行独立控制。

串口控制器就是1台写入了串口通信程序的单片机控制器,有2种工作模式:

1)上位机监控模式:可由上位机串口控制,实现串口监控;

2)脱机控制模式:在通过上位机设置好相关参数后,也可脱离上位机进行独立控制。

参考资料来源:百度百科:串口控制器

linux使用串口键盘

Linux系统支持使用串口键盘,但是需要先安装串口驱动,然后才能使用串口键盘。

1、安装串口驱动:

首先,需要安装串口驱动,可以使用以下命令安装:

sudo apt-get install setserial

2、检查串口:

接下来,需要检查串口是否正常工作,可以使用以下命令检查:

sudo setserial -g /dev/ttyS*

3、设置串口:

最后,需要设置串口,可以使用

Linux串口调试工具--minicom

安装完成后,请不要着急打开软件。需先进行配置。具体步骤如下:

查看串口设备及文件权限

linux下的所有操作面向用户的都是文件操作,在对串口操作之前,我们应该先确认自己对该文件有没有读写权限。

linux下的usb串口命名为ttyUSB*,运行上面命令,可以看到有几个设备挂载。

我们这里是:

只有ttuUSB0.再用lsusb查看:

usb 004正是我们挂上去的usb转串口线缆,使用的芯片是PL2303。

但是正如上面显示,ttyUSB0这个设备是root所有的,所以,我们以普通用户身份打开minicom是没法访问该文件的。

运行sudo minicom -s便进入了minicom的配置界面,使用上下键选择Serial port setup,回车。此时光标在“change which setting”后面停留,它的上面有如下菜单:

我们只需输入上面对应的字母,就可以进如相应的菜单进行设置。设置完成,回车,光标会回到“change which setting”后面,如此重复。完成按回车返回主菜单即可。

返回主菜单后,选择“Save setup as df1”,将其保存为默认设置,然后选择 Exit退出。需退出后重新打开minicom,软件才会使用上述参数进行初始化。

注意:如果没有使用USB转串口,而是直接使用串口,那么Serial Device要配置为/dev/ttyS0。

如果上面设置顺利,打开minicom

重新给设备上电后,此时,窗口里就有信息打印出来了。

1)需使用Ctrl+a 进入设置状态

2)按z进入设置菜单

(1)O键:打开配置选项;

(2)W键:自动卷屏。当显示的内容超过一行之後,自动将後面的内容换行。这个功能在查看内核的启动信息时很有用。

(3)C键:清除屏幕的显示内容;

(4)B键:浏览minicom的历史显示;

(5)X键:退出minicom,会提示确认退出。

Ctrl + A -- O

选择"Filenames and paths"

更多的参数,参见"man minicom"的输出。

如果不加这个项,那么在minicom和pc交互的时候中键入命令超过一行时候会被截断,(这时候可以通过 C-a w 来开和关切换截断行功能).

这样,启动之后我们会发现显示的内容不是黑白的了。

这样,启动之后,所在minicom的输出都会在filename中保留一份,如果原来文件存在,则追加,不存在则创建一个。

这样,我们可以取代用 C-a * 发送命令的方式,将 C-a 替换成 [Alt] 或者 [ESC] .

这里,filename是你的脚本文件的名字,应该指定绝对路径,否则就会在你启动minicom的路径下寻找。

Minicom是基于窗口的。要弹出所需功能的窗口,可按下 Ctrl-A (以下使用C-A来表示Ctrl-A),然后再按各功能键(a-z或A-Z)。先按C-A,再按'z',将出现一个帮助窗口,提供了所有命令的简述。配置 minicom(-s 选项,或者C-A、O)时,可以改变这个转义键,不过现在我们还是用Ctrl-A吧。

这里,只给出很少的命令,更多的交互命令参见"C-a z"的帮助输出。

minicom -s 或启动minicom之后运行 C-a o 来进行配置。

C:脚本文件的存放位置: C-a g 运行脚本时的路径 。

D:选择脚本程序: 默认 runscript ,也可以选择 bash 脚本格式。

可以参考man手册 man runscript .交互命令中可以运行" C-a G "来运行脚本。

参考资料 :


网页题目:linux读取串口命令 linux 串口read
分享URL:http://6mz.cn/article/doppchs.html

其他资讯