日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
串口linux開發(fā)實(shí)踐分享(串口linux)

串口linux開發(fā)實(shí)踐分享

在湛江等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),營(yíng)銷型網(wǎng)站,成都外貿(mào)網(wǎng)站建設(shè)公司,湛江網(wǎng)站建設(shè)費(fèi)用合理。

隨著科技的發(fā)展,串口通信的應(yīng)用越來(lái)越廣泛,特別是在工業(yè)自動(dòng)化、智能家居、電子產(chǎn)品等領(lǐng)域。串口通信的開發(fā)工作需要在Linux系統(tǒng)下進(jìn)行,但是Linux系統(tǒng)上各種開發(fā)環(huán)境繁多,如何選擇合適的工具和方法進(jìn)行開發(fā),是開發(fā)人員需要考慮的重要問(wèn)題。本文將分享我在串口Linux開發(fā)實(shí)踐中的經(jīng)驗(yàn)和心得。

1、串口概述

串口是計(jì)算機(jī)和外部設(shè)備之間進(jìn)行通信的一種方式。串口通信可以使用RS-232、RS-485、USB等不同的協(xié)議。串口通信具有數(shù)據(jù)傳輸速度慢、傳輸距離短、信息傳輸穩(wěn)定可靠等特點(diǎn),因此被廣泛應(yīng)用。

2、串口Linux開發(fā)環(huán)境搭建

2.1 嵌入式Linux開發(fā)環(huán)境

需要開發(fā)嵌入式Linux系統(tǒng),選擇適合的開發(fā)環(huán)境非常重要。嵌入式Linux主要集成了Linux內(nèi)核、文件系統(tǒng)、libc等組件。這里我們推薦使用OpenWrt開源操作系統(tǒng),其特點(diǎn)是小巧、靈活、易于定制,可運(yùn)行于各種嵌入式設(shè)備上。使用OpenWrt開發(fā)和調(diào)試串口應(yīng)用非常方便。

2.2 Linux深度開發(fā)環(huán)境

如果開發(fā)應(yīng)用層的串口程序,我們推薦使用廣泛應(yīng)用的編譯器gcc和調(diào)試工具gdb。這些工具支持C、C++等多種編程語(yǔ)言,并能夠很好地支持Linux操作系統(tǒng)。另外,如有需要也可以選擇Qt Creator、Eclipse等綜合性開發(fā)環(huán)境。

3、串口Linux開發(fā)實(shí)踐

3.1 串口開發(fā)基礎(chǔ)

在進(jìn)行串口開發(fā)之前,我們需要掌握以下幾個(gè)基本知識(shí):

(1)Linux系統(tǒng)中串口設(shè)備文件的命名規(guī)則為“/dev/tty*”。

(2)需要使用“open”函數(shù)打開串口設(shè)備,使用“read”和“write”函數(shù)實(shí)現(xiàn)串口讀寫。

(3)通過(guò)“ioctl”函數(shù)設(shè)置串口參數(shù),如波特率、數(shù)據(jù)位、奇偶校驗(yàn)位等。

3.2 串口開發(fā)實(shí)例

下面我們以一個(gè)簡(jiǎn)單的串口通信程序?yàn)槔齺?lái)說(shuō)明如何進(jìn)行串口開發(fā)。

#include

#include

#include

#include

#include

#include

int set_opt(int fd, int nSpeed, int nBits, char nEvent, int nStop)

{

struct termios newtio, oldtio;

if ( tcgetattr( fd, &oldtio ) != 0 )

{

perror(“tcgetattr”);

return -1;

}

bzero( &newtio, sizeof( newtio ) );

newtio.c_cflag |= CLOCAL | CREAD;

newtio.c_cflag &= ~CSIZE;

switch ( nBits )

{

case 7:

newtio.c_cflag |= CS7;

break;

case 8:

newtio.c_cflag |= CS8;

break;

}

switch ( nEvent )

{

case ‘O’:

newtio.c_cflag |= PARENB;

newtio.c_cflag |= PARODD;

newtio.c_iflag |= ( INPCK | ISTRIP );

break;

case ‘E’:

newtio.c_iflag |= ( INPCK | ISTRIP );

newtio.c_cflag |= PARENB;

newtio.c_cflag &= ~PARODD;

break;

case ‘N’:

newtio.c_cflag &= ~PARENB;

break;

}

switch ( nSpeed )

{

case 2400:

cfsetispeed( &newtio, B2400 );

cfsetospeed( &newtio, B2400 );

break;

case 4800:

cfsetispeed( &newtio, B4800 );

cfsetospeed( &newtio, B4800 );

break;

case 9600:

cfsetispeed( &newtio, B9600 );

cfsetospeed( &newtio, B9600 );

break;

case 115200:

cfsetispeed( &newtio, B115200 );

cfsetospeed( &newtio, B115200 );

break;

default:

cfsetispeed( &newtio, B9600 );

cfsetospeed( &newtio, B9600 );

break;

}

if ( nStop == 1 )

{

newtio.c_cflag &= ~CSTOPB;

}

else if ( nStop == 2 )

{

newtio.c_cflag |= CSTOPB;

}

newtio.c_cc[VTIME] = 0;

newtio.c_cc[VMIN] = 0;

tcflush( fd, TCIFLUSH );

if ( tcsetattr( fd, TCSANOW, &newtio ) != 0 )

{

perror(“tcsetattr”);

return -1;

}

return 0;

}

int mn(void)

{

int fd;

int nread;

char buf[1024] = {0};

fd = open(“/dev/ttyAMA0”,O_RDWR);

if(fd == -1 )

{

perror(“open”);

return -1;

}

set_opt(fd, 115200, 8, ‘N’, 1);

while(1)

{

nread = read(fd, buf, 1024);

if(nread > 0)

{

printf(“recv:%s\n”, buf);

}

}

close(fd);

return 0;

}

這段程序?qū)崿F(xiàn)了打開串口設(shè)備“/dev/ttyAMA0”并設(shè)置波特率為115200、數(shù)據(jù)位為8、無(wú)奇偶校驗(yàn)位、停止位為1。然后讀取串口發(fā)送的數(shù)據(jù),并在終端上輸出。

4、

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!

Linux串口調(diào)試工具–minicom

安裝完成后,請(qǐng)氏神不要著急打開軟件。需先進(jìn)行配置。具體步驟如下:

查看串口設(shè)備及文件權(quán)限

linux下的所有操作面向用戶的都是文件操作,在對(duì)串口操作之前,我們應(yīng)該先確認(rèn)自己對(duì)該文件有沒(méi)有讀寫權(quán)限。

linux下的u串口命名為ttyUSB*,運(yùn)行上面命令,可以看到有幾個(gè)設(shè)備掛載。

我們這里是:

只有ttuUSB0.再用lsu查看:

u 004正是我們掛上去的u轉(zhuǎn)串口線纜,使用的芯片是PL2303。

但是正如上面顯示,ttyUSB0這個(gè)設(shè)備是root所有的,所以,我們以普通用戶身份打開minicom是沒(méi)法訪問(wèn)該文件的。

運(yùn)行sudo minicom -s便進(jìn)入了minicom的配置界面,使用上下鍵選擇Serial port setup,回車。此時(shí)光標(biāo)在“change which setting”后面停留,它的上面有如下菜單:

我們只需輸入上面對(duì)穗核哪應(yīng)的字母,就可以進(jìn)如相應(yīng)的菜單進(jìn)行設(shè)置。設(shè)置完成,回車,光標(biāo)會(huì)回到“change which setting”后面,如此重復(fù)。完成按回車返回主菜單即可。

返回主菜單后,選擇“Save setup as df1”,將其保存為默認(rèn)設(shè)置,然后選擇 Exit退出。需退出后重新打開minicom,軟件才會(huì)使用上述參數(shù)進(jìn)行初始化。

注意:如果沒(méi)有使用USB轉(zhuǎn)串口,而是直接使用串口,那么Serial Device要配置為/dev/ttyS0。

如果上面設(shè)置順利,打開minicom

重新給設(shè)備上電后,此時(shí),窗口里就有信息打印出來(lái)了。

1)需使用Ctrl+a 進(jìn)入設(shè)置狀態(tài)

2)按z進(jìn)入設(shè)置菜單

(1)O鍵:打開配置選項(xiàng);

(2)W鍵:自動(dòng)卷屏。當(dāng)顯示的內(nèi)容超過(guò)一行之後,自動(dòng)將後面的內(nèi)容換行。這個(gè)功能在查看內(nèi)核的啟動(dòng)信息時(shí)很有用。

(3)C鍵:清除屏幕的顯示內(nèi)容;

(4)B鍵:瀏覽minicom的歷史顯示;

(5)X鍵:退出minicom,會(huì)提示確認(rèn)退出。

Ctrl + A –> O

選擇”Filenames and paths”

更多的參數(shù),參見”man minicom”的輸出。

如果不加這個(gè)項(xiàng),那么在minicom和pc交互的時(shí)候中鍵入命令超過(guò)一行時(shí)候會(huì)被截?cái)?,(這時(shí)候可以通過(guò) w 來(lái)開和關(guān)切換截?cái)嘈泄δ埽?

這樣,啟動(dòng)之后我們會(huì)發(fā)現(xiàn)顯示的內(nèi)容不是黑白的了。

這樣,啟動(dòng)之后,所在minicom的輸出都會(huì)在中保留一份,如果原來(lái)文件存在,則追加,不存在猜碼則創(chuàng)建一個(gè)。

這樣,我們可以取代用 * 發(fā)送命令的方式,將 替換成 或者 .

這里,是你的腳本文件的名字,應(yīng)該指定絕對(duì)路徑,否則就會(huì)在你啟動(dòng)minicom的路徑下尋找。

Minicom是基于窗口的。要彈出所需功能的窗口,可按下 Ctrl-A (以下使用C-A來(lái)表示Ctrl-A),然后再按各功能鍵(a-z或A-Z)。先按C-A,再按’z’,將出現(xiàn)一個(gè)幫助窗口,提供了所有命令的簡(jiǎn)述。配置 minicom(-s 選項(xiàng),或者C-A、O)時(shí),可以改變這個(gè)轉(zhuǎn)義鍵,不過(guò)現(xiàn)在我們還是用Ctrl-A吧。

這里,只給出很少的命令,更多的交互命令參見” z”的幫助輸出。

minicom -s 或啟動(dòng)minicom之后運(yùn)行 o 來(lái)進(jìn)行配置。

C:腳本文件的存放位置: g 運(yùn)行腳本時(shí)的路徑 。

D:選擇腳本程序: 默認(rèn) runscript ,也可以選擇 bash 腳本格式。

可以參考man手冊(cè) man runscript .交互命令中可以運(yùn)行” G “來(lái)運(yùn)行腳本。

參考資料

Linux下串口通信丟字節(jié)的問(wèn)題是怎么樣解決

int con=atoi(portstr);

unsigned char Port_file_name;

int fd0,rc;

struct termios ts0;

switch (con)

{ //選項(xiàng)O_NOCTTY 表示不能把本串口當(dāng)成控制終端,否則用戶的鍵盤輸入信息將影響程序的執(zhí)行

//O_NDELAY表示瞎判打開串口的時(shí)候,程序并不關(guān)心另一端悔則的串口是否在使用中

case 1: fd0=open(“/dev/ttyM0”,O_RDWR | O_NOCTTY | O_NDELAY); break;

case 2: fd0=open(“/dev/ttyM1”,O_RDWR | O_NOCTTY | O_NDELAY); break;

case 3: fd0=open(“/dev/ttyM2”,O_RDWR | O_NOCTTY | O_NDELAY); break;

case 4: fd0=open(“/dev/ttyM3”,O_RDWR | O_NOCTTY | O_NDELAY); break;

case 5: fd0=open(“/dev/ttyM4”,O_RDWR | O_NOCTTY | O_NDELAY); break;

case 6: fd0=open(“/dev/ttyM5”,O_RDWR | O_NOCTTY | O_NDELAY); break;

case 7: fd0=open(“/dev/ttyM6”,O_RDWR | O_NOCTTY | O_NDELAY); break;

case 8: fd0=open(“/dev/ttyM7”,O_RDWR | O_NOCTTY | O_NDELAY); break;

default : fd0=open(“/dev/ttyM0”,O_RDWR | O_NOCTTY | O_NDELAY); break;

}

tcgetattr(fd0,&ts0);

bzero(&ts0,sizeof(struct termios));

switch (gytype)

{

case 1:{ts0.c_cflag |= B300 | CS7 | CLOCAL | CREAD | PARENB ;

ts0.c_cflag &= ~PARODD; // 轉(zhuǎn)換為偶效驗(yàn)

ts0.c_iflag |= INPCK; // Disnable parity checking

break; }

case 2:{ts0.c_cflag |= B1200 | CS8 | CLOCAL | CREAD | PARENB ;

ts0.c_cflag &= ~PARODD; //磨前改 轉(zhuǎn)換為偶效驗(yàn)

ts0.c_iflag |= INPCK; // Disnable parity checking

break;

}

case 3:{

ts0.c_cflag |= B9600 | CS8 | CLOCAL | CREAD ;

ts0.c_cflag &= ~PARENB; // Clear parity enable

ts0.c_iflag &= ~INPCK; // Enable parity checking

break;

}

case 4:{ts0.c_cflag |= B9600 | CS8 | CLOCAL | CREAD | PARENB ;

ts0.c_cflag &= ~PARODD; // 轉(zhuǎn)換為偶效驗(yàn)

ts0.c_iflag |= INPCK; // Disnable parity checking

break;

}

}

ts0.c_lflag &= ~ECHO;

ts0.c_lflag &= ~ECHONL;

ts0.c_iflag &= ~IXOFF;

ts0.c_iflag &= ~IXON;

ts0.c_cflag &= ~CSIZE;

switch (gytype)

{

case 1:{ts0.c_cflag |= CS7 ; break;}

case 2:{ts0.c_cflag |= CS8 ; break;}

case 3:{ts0.c_cflag |= CS8 ; break;}

case 4:{ts0.c_cflag |= CS8 ; break;}

}

ts0.c_lflag &= ~ICANON; //如果設(shè)置使能規(guī)范輸入,否則使用原始數(shù)據(jù)(本文使用)

ts0.c_oflag &= ~ONLCR; //如果設(shè)置將NL轉(zhuǎn)換成CR-NL后輸出

ts0.c_iflag &= ~INLCR; //如果設(shè)置將接收到的NL(換行)轉(zhuǎn)換成CR(回車)。

ts0.c_cc = 0; //最少可讀數(shù)據(jù)

ts0.c_cc = 0; //等待數(shù)據(jù)時(shí)間(10秒的倍數(shù))

ts0.c_cflag &= ~CSTOPB; //如果設(shè)置則使用兩個(gè)停止位 ,如果取消則使用一個(gè)停止位

ts0.c_iflag |= IGNBRK; //如果設(shè)置則忽略接收到的break信號(hào)

ts0.c_lflag &= ~IEXTEN; //如果設(shè)置則啟用實(shí)現(xiàn)自定義的輸入處理

ts0.c_lflag |= NOFLSH; //如果設(shè)置則禁止產(chǎn)生SIGINT,SIGQUIT和SIGSUSP信號(hào)時(shí)刷新輸入和輸出隊(duì)列

switch (gytype)

{

case 1:{rc = cfsetospeed(&ts0,B300);break; }

case 2:{rc = cfsetospeed(&ts0,B1200);break; }

case 3:{rc = cfsetospeed(&ts0,B9600);break; }

case 4:{rc = cfsetospeed(&ts0,B9600);break; }

}

rc = tcsetattr(fd0,TCSAFLUSH,&ts0);

串口linux的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于串口linux,串口linux開發(fā)實(shí)踐分享,Linux串口調(diào)試工具–minicom,Linux下串口通信丟字節(jié)的問(wèn)題是怎么樣解決的信息別忘了在本站進(jìn)行查找喔。

香港服務(wù)器選創(chuàng)新互聯(lián),香港虛擬主機(jī)被稱為香港虛擬空間/香港網(wǎng)站空間,或者簡(jiǎn)稱香港主機(jī)/香港空間。香港虛擬主機(jī)特點(diǎn)是免備案空間開通就用, 創(chuàng)新互聯(lián)香港主機(jī)精選cn2+bgp線路訪問(wèn)快、穩(wěn)定!


網(wǎng)站名稱:串口linux開發(fā)實(shí)踐分享(串口linux)
鏈接分享:http://www.dlmjj.cn/article/cospsdp.html