資源描述:
《Linux下串口通信編程.doc》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、Linux下串口通信編程一、什么是串口通信?串口通信是指計(jì)算機(jī)主機(jī)與外設(shè)之間以及主機(jī)系統(tǒng)與主機(jī)系統(tǒng)之間數(shù)據(jù)的串行傳送。使用串口通信時(shí),發(fā)送和接收到的每一個(gè)字符實(shí)際上都是一次一位的傳送的,每一位為1或者為0。二、串口通信的分類串口通信可以分為同步通信和異步通信兩類。同步通信是按照軟件識(shí)別同步字符來實(shí)現(xiàn)數(shù)據(jù)的發(fā)送和接收,異步通信是一種利用字符的再同步技術(shù)的通信方式。2.1同步通信同步通信是一種連續(xù)串行傳送數(shù)據(jù)的通信方式,一次通信只傳送一幀信息。這里的信息幀與異步通信中的字符幀不同,通常含有若干個(gè)數(shù)據(jù)字符。它們均由同步字符、數(shù)據(jù)字符和校驗(yàn)字符(CRC)組成。其中同步
2、字符位于幀開頭,用于確認(rèn)數(shù)據(jù)字符的開始。數(shù)據(jù)字符在同步字符之后,個(gè)數(shù)沒有限制,由所需傳輸?shù)臄?shù)據(jù)塊長(zhǎng)度來決定;校驗(yàn)字符有1到2個(gè),用于接收端對(duì)接收到的字符序列進(jìn)行正確性的校驗(yàn)。同步通信的缺點(diǎn)是要求發(fā)送時(shí)鐘和接收時(shí)鐘保持嚴(yán)格的同步。2.2異步通信異步通信中,數(shù)據(jù)通常以字符或者字節(jié)為單位組成字符幀傳送。字符幀由發(fā)送端逐幀發(fā)送,通過傳輸線被接收設(shè)備逐幀接收。發(fā)送端和接收端可以由各自的時(shí)鐘來控制數(shù)據(jù)的發(fā)送和接收,這兩個(gè)時(shí)鐘源彼此獨(dú)立,互不同步。接收端檢測(cè)到傳輸線上發(fā)送過來的低電平邏輯"0"(即字符幀起始位)時(shí),確定發(fā)送端已開始發(fā)送數(shù)據(jù),每當(dāng)接收端收到字符幀中的停止位時(shí),
3、就知道一幀字符已經(jīng)發(fā)送完畢。在異步通行中有兩個(gè)比較重要的指標(biāo):字符幀格式和波特率。(1)字符幀,由起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位組成。1.起始位:位于字符幀開頭,占1位,始終為邏輯0電平,用于向接收設(shè)備表示發(fā)送端開始發(fā)送一幀信息。2.數(shù)據(jù)位:緊跟在起始位之后,可以設(shè)置為5位、6位、7位、8位,低位在前高位在后。3.奇偶校驗(yàn)位:位于數(shù)據(jù)位之后,僅占一位,用于表示串行通信中采用奇校驗(yàn)還是偶校驗(yàn)。(2)波特率,波特率是每秒鐘傳送二進(jìn)制數(shù)碼的位數(shù),單位是b/s。異步通信的優(yōu)點(diǎn)是不需要傳送同步脈沖,字符幀長(zhǎng)度也不受到限制。缺點(diǎn)是字符幀中因?yàn)榘似鹗嘉缓屯V刮?,因?/p>
4、降低了有效數(shù)據(jù)的傳輸速率。三、什么是RS-232?RS-232-C接口(又稱EIARS-232-C)它是在1970年由美國電子工業(yè)協(xié)會(huì)(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn)。它的全名是"數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通訊設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)"該標(biāo)準(zhǔn)規(guī)定采用一個(gè)25個(gè)腳的DB25連接器,對(duì)連接器的每個(gè)引腳的信號(hào)內(nèi)容加以規(guī)定,還對(duì)各種信號(hào)的電平加以規(guī)定。傳輸距離在碼元畸變小于4%的情況下,傳輸電纜長(zhǎng)度應(yīng)為50英尺。四、計(jì)算機(jī)串口引腳說明引出號(hào)說明1接地2TXD輸出3RXD輸入4RTS請(qǐng)求發(fā)送
5、5CTS請(qǐng)求接收6DSR數(shù)據(jù)序列就緒7GND邏輯地8DCD數(shù)據(jù)負(fù)載檢測(cè)9保留10保留11未定義12后備DCD13后備CTS14后備TXD15傳輸時(shí)鐘16后備RXD17接收時(shí)鐘18未定義19后備RTS20DTR數(shù)據(jù)終端就緒21信號(hào)質(zhì)量檢測(cè)22鬧鐘檢測(cè)23數(shù)據(jù)速率選擇24傳輸時(shí)鐘25未定義五、全雙工與半雙工1.全雙工,表示機(jī)器可以同時(shí)發(fā)送數(shù)據(jù)也可以接收數(shù)據(jù),有兩個(gè)獨(dú)立的數(shù)據(jù)通道(一個(gè)用于發(fā)送,一個(gè)用于接收)2.半雙工,表示機(jī)器不能在發(fā)送數(shù)據(jù)的同時(shí)也接收數(shù)據(jù)。六、流量控制1.使用軟件方法使用特殊的字符來標(biāo)記數(shù)據(jù)流的開始和結(jié)束,比如XON,DC1,八進(jìn)制021來標(biāo)志開
6、始,用X0FF,DC3,八進(jìn)制023來標(biāo)志結(jié)束。2.使用硬件方法使用RS232的CTS和RTS信號(hào)來代替特殊字符控制。當(dāng)接收方準(zhǔn)備接收更多數(shù)據(jù)時(shí),設(shè)置CTS為0,反之設(shè)置成1。對(duì)應(yīng)的發(fā)送端準(zhǔn)備發(fā)送數(shù)據(jù)時(shí),設(shè)置RTS為0。七、串口的訪問串口設(shè)備在LINUX下與所有設(shè)備一樣都是通過設(shè)備文件來進(jìn)行訪問。7.1打開串口LINUX系統(tǒng)下串口設(shè)備是通過open函數(shù)來打開的,不過需要注意的是,一般用戶是沒有權(quán)限訪問設(shè)備文件的,需要將打開的串口設(shè)備的訪問權(quán)限設(shè)置成一般用戶可以訪問的權(quán)限。open函數(shù)頭文件#include#include#include函數(shù)原型intopen(
7、constchar*pathname,intoflag,.../*,mode_tmode*/);參數(shù)constchar*pathname-要打開文件的文件名稱,例如/dev/ttyS0intoflag-文件打開方式,可用標(biāo)志如下:O_RDONLY以只讀方式打開文件O_WRONLY以只寫方式打開文件O_RDWR以讀寫方式打開文件O_APPEND寫入數(shù)據(jù)時(shí)添加到文件末尾O_CREATE如果文件不存在則產(chǎn)生該文件,使用該標(biāo)志需要設(shè)置訪問權(quán)限位mode_tO_EXCL指定該標(biāo)志,并且指定了O_CREATE標(biāo)志,如果打開的文件存在則會(huì)產(chǎn)生一個(gè)錯(cuò)誤O_TRUNC如果文件存
8、在并且成功以寫或者只寫方式打開,則清除