關于Linux串口測試工具解析
由于已經完成了***個HELLO程序,標志著整個編譯環境已經沒有問題了,下來準備做一下串口測試程序。由于串口驅動開發板已經作好了,所以就作一個Linux串口測試工具簡單的數據收發看看。
- /* rs232_send.c*/
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #include
- #defineBAUDRATEB115200//38400
- #defineMODEMDEVICE"/dev/ttyS1"
- int main()
- {
- int fd,c=0,res;
- struct termios oldtio,newtio;
- intch;
- static char s1[20],buf[19];
- printf("start ...\n");
- /*打開PC的COM1口*/
- fd = open(MODEMDEVICE,O_RDWR|O_NOCTTY);
- if (fd
- {
- perror(MODEMDEVICE);
- exit(1);
- }
- printf("open...\n");
- /*將舊的通訊參數存入oldtio結構*/
- tcgetattr(fd,&oldtio);
- /*初始化新的newtio */
- bzero(&newtio,sizeof(newtio));
- /*8N1*/
- newtio.c_cflag = BAUDRATE|CS8|CLOCAL|CREAD;
- newtio.c_iflag = IGNPAR;
- newtio.c_oflag = 0;
- /*正常模式*/
- /*newtio.c_lflag = ICANON;*/
- /*非正常模式*/
- newtio.c_lflag = 0;
- newtio.c_cc[VTIME] = 0;
- newtio.c_cc[VMIN] = 10;
- tcflush(fd,TCIFLUSH);
- /*新的temios作為通訊端口參數*/
- tcsetattr(fd,TCSANOW,&newtio);
- printf("writing...\n");
- while(1)
- {
- res = read(fd,buf,10);
- res = write(fd,buf,7);
- if(buf[0]==9) break;
- }
- printf("close...\n");
- close(fd);
- /*還原舊參數*/
- tcsetattr(fd,TCSANOW,&oldtio);
- return 0;
- }
還有一點要注意,就是Linux串口測試工具串口有兩種工作模式,即正規模式和非正規模式,如果習慣在串口調試器中用16進制發送,此時串口應該為非正規模式才行。
下面是這兩種模式的說明
Linux串口測試工具正規模式(CANONICAL或者COOKED)
此模式下,終端設備會處理特殊字符,并且數據傳輸是一次一行的方式,既按回車后才開始發送和接收數據。例如LINUX的SHELL。
Linux串口測試工具非正規模式(NON-CANONICAL或者RAW)
此模式下,終端設備不會處理特殊字符,并且數據傳輸是一次一個字符的方式,既不用按回車換行。例如LINUX的VIM。
【編輯推薦】