?? linux2.txt
字號:
需要注意的是:
如果不是開發終端之類的,只是串口傳輸數據,而不需要串口來處理,那么使用原始模式(Raw Mode)方式來通訊,設置方式如下:
options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); /*Input*/options.c_oflag &= ~OPOST; /*Output*/
讀寫串口
設置好串口之后,讀寫串口就很容易了,把串口當作文件讀寫就是。
發送數據 char buffer[1024];int Length;int nByte;nByte = write(fd, buffer ,Length)
讀取串口數據
使用文件操作read函數讀取,如果設置為原始模式(Raw Mode)傳輸數據,那么read函數返回的字符數是實際串口收到的字符數。
可以使用操作文件的函數來實現異步讀取,如fcntl,或者select等來操作。
char buff[1024];int Len;int readByte = read(fd,buff,Len);
關閉串口
關閉串口就是關閉文件。
close(fd);
例子
下面是一個簡單的讀取串口數據的例子,使用了上面定義的一些函數和頭文件
/**********************************************************************代碼說明:使用串口二測試的,發送的數據是字符,但是沒有發送字符串結束符號,所以接收到后,后面加上了結束符號。我測試使用的是單片機發送數據到第二個串口,測試通過。**********************************************************************/#define FALSE -1#define TRUE 0/*********************************************************************/int OpenDev(char *Dev){int fd = open( Dev, O_RDWR ); //| O_NOCTTY | O_NDELAY if (-1 == fd) { perror("Can't Open Serial Port");return -1; } else return fd;}int main(int argc, char **argv){int fd;int nread;char buff[512];char *dev = "/dev/ttyS1"; //串口二fd = OpenDev(dev);set_speed(fd,19200);if (set_Parity(fd,8,1,'N') == FALSE) {printf("Set Parity Error");exit (0);}while (1) //循環讀取數據{ while((nread = read(fd, buff, 512))>0){ printf("Len %d",nread); buff[nread+1] = ''; printf( "%s", buff); }}//close(fd); // exit (0);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -