欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

linux命令行讀串口,linux串口讀取命令

linux如何查看哪個串口是真實串口,哪個串口

1.使用ls -l ttyS*命令顯示如下

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比南通網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式南通網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋南通地區(qū)。費用合理售后完善,十余年實體公司更值得信賴。

crw-rw----. 1 root dialout 4, 64 5月 17 02:24 /dev/ttyS0

crw-rw----. 1 root dialout 4, 65 5月 17 02:24 /dev/ttyS1

crw-rw----. 1 root dialout 4, 66 5月 17 02:24 /dev/ttyS2

crw-rw----. 1 root dialout 4, 67 5月 17 02:24 /dev/ttyS3

但你不知到哪個是真實的串口,雖然一般都是ttyS0,但也不敢妄然確定。

2.使用cat /proc/tty/driver/serial

serinfo:1.0 driver revision:

0: uart:16550A port:000003F8 irq:4 tx:0 rx:0

1: uart:unknown port:000002F8 irq:3

2: uart:unknown port:000003E8 irq:4

3: uart:unknown port:000002E8 irq:3

我們發(fā)現(xiàn)串口0的uart值時16550A,tx值為0,rx值也為0,因此我們斷定本機只有一個串口,是串口0,即ttyS0

3.也可以用dmesg | grep ttyS*,但這個不是很好用,當然你可以自己使用正則法則取找到。

注意:還應查看是否有USB轉(zhuǎn)串口,這個就很簡單了:ls ttyUSB*,全部搞定。

linux怎么讀取串口數(shù)據(jù)

#includestdio.h

#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上使用串口設備

簡單的運行 dmesg 命令

$ dmesg | grep tty

輸出:

[ 37.531286] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

[ 37.531841] 00:0b: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A

[ 37.532138] 0000:04:00.3: ttyS1 at I/O 0x1020 (irq = 18) is a 16550A

setserial 命令

setserial 是一個程序用于設定并/或報告某個串口關聯(lián)的配置信息。該信息包括串口用到的I/O 端口和中斷號,以及Break鍵是否應被解釋為Secure Attention Key 等等。 僅僅是輸出如下的命令:

$ setserial -g /dev/ttyS[0123]

輸出:

/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4

/dev/ttyS1, UART: 16550A, Port: 0x1020, IRQ: 18

/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4

/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3

帶-g選項的setserial幫助找到你的Linux板子上的物理串口。

Linux 串口控制臺程序

一旦串口被確定了,你就能使用許多的工具來配置Linux板子:

minicom- 用于控制modem和連接到dump 設備的最好的串口通信程序。

wvidial or other GUI dial up networking program - 一個內(nèi)建智能PPP 撥號器。

getty / agetty - agetty 打開一個 tty 端口, 提示登錄名稱并調(diào)用 /bin/login 命令。

grub / lilo configuration - 配置串口為系統(tǒng)控制臺。

Linux普通用戶運行串口

將USB串口設備插入USB口后,會在/dev/目錄下生成/dev/ttyUSB0文件(也可能為/dev/ttyUSB1,/dev/ttyUSB2...),

查看此文件

輸出為:

c說明表明設備為字符設備文件(d表示目錄文件,-表示普通文件,l表示鏈接文件,b表示塊文件),

其中rw-rw----表示root用戶作為文件所有者可以讀和寫,dialout用戶組內(nèi)的用戶可以讀和寫,其他用戶不允許讀、寫和執(zhí)行(r表示可讀,w表示可寫,x表示可執(zhí)行)

因此,需要將當前用戶增加到dialout用戶組中

網(wǎng)站名稱:linux命令行讀串口,linux串口讀取命令
文章來源:http://chinadenli.net/article44/dsgsshe.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航網(wǎng)站收錄服務器托管外貿(mào)建站定制網(wǎng)站網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化