表明串列埠控制留出的介面
#ifndef _cserial_h_
#define _cserial_h_
#include
//標準函式庫定義
#include
//unix標準函式定義
#include
#include
#include
//檔案控制定義
#include
//posix中斷控制定義
#include
//錯誤號定義
#include
using
namespace std;
//串列埠資訊
typedef
struct port_info
*pport_info;
class
cserial
;#endif
串列埠控制實現
#include
"cserial.h"
cserial::
cserial()
; //設定可支援的波特率
// name_arr[8] = ;
}cserial::
~cserial()
int cserial::
uartinit
(pport_info p_info)
void cserial::
uartclose
(int fd)
int cserial::
uartsend
(int fd,
void
*buf,
int len)
else
}int cserial::
uartrecv
(int fd,
void
*buf,
int len)
// 返回值為所讀到的位元組數
else
if(ret >0)
}return ret;
}int cserial::
setparity
(int fd,
int baudrate,
int databits,
int stopbits,
int parity)
opt.c_cflag |
=(clocal | cread)
;//一般必設定的標誌
/* for(int i = 0; i < sizeof(speed_arr) / sizeof(int); i++) // 設定波特率
tcflush(fd, tcioflush);}}
*///設定波特率
switch
(baudrate)
tcflush
(fd, tcioflush)
;//setup input/output baudrate
cfsetispeed
(&opt,baudrate)
;//printf("cfsetispeed::c_cflag = %x\r\n", new_opt.c_cflag);
cfsetospeed
(&opt,baudrate)
;//printf("cfsetospeed::c_cflag = %x\r\n", new_opt.c_cflag);if(
tcsetattr
(fd, tcsanow,
&opt)!=0
)switch
(databits)
//設定資料位數
switch
(parity)
//設定校驗位
switch
(stopbits)
//設定停止位
//修改控制模式,保證程式不會占用串列埠且可正常讀取輸入資料
opt.c_cflag |
=(clocal | cread)
;//在用write傳送資料時沒有鍵入回車,資訊就傳送不出去,這主要是因為我們在輸入輸出時是按照規範模式》接收到回車或換行才傳送,
opt.c_lflag &=~
(icanon | echo | echoe | isig)
; opt.c_oflag &
=~opost;
//傳送字元0x0d的時候,往往接收端得到的字元是0x0a,
//原因是因為在串列埠設定中c_iflag和c_oflag中存在從nl-cr和cr-nl的對映,即串列埠能把回車和換行當成同一
個字元,可以進行如下設定遮蔽之
opt.c_oflag &=~
(onlcr | ocrnl)
; opt.c_iflag &=~
(icrnl | inlcr)
;//c_cc陣列的vstart和vstop元素被設定成dc1和dc3,
//代表ascii標準的xon和xoff字元,如果在傳輸這兩個字元的時候就傳不過去,需要把軟體流控制遮蔽,
opt.c_iflag &=~
(ixon | ixoff | ixany)
;tcflush
(fd, tciflush)
; opt.c_cc[vtime]=0
;//設定超時為15sec
opt.c_cc[vmin]=0
;//update the opt and do it nowif(
tcsetattr
(fd, tcsanow,
&opt)!=0
)return0;
}int cserial::
opendev
(char
*dev)
else
return fd;
}
#include
"cserial.h"
#include
#include
#include
intmain()
uart3.
uartclose
(fd)
;return0;
}~
基於C 實現串列埠通訊Demo
24 getportnames 方法 獲取當前計算機的串列埠名的陣列 25 foreach string com in system.io.ports.serialport.getportnames 26 29 30 cbcom.selectedindex 0 31 sp1.baudrate 960...
python實現串列埠控制
使用rs232串列埠線或者是rs232轉usb的這一類的介面,會需要com口作為介面來進行輸入輸出調式,寫了個指令碼來控制com口,用到了python內建的serial庫 如下 coding utf 8 import serial import time def settout t print ol...
Python程式設計 基於serial庫串列埠通訊實戰
在python中進行串列埠的相關應用程式設計,需要借助pyserial這個庫。安裝串列埠庫 pip3 install pyserial 如果你使用的是python2.x,那麼你使用pip安裝的方式如下 pip install pyserialclass uartinit object def ini...