關(guān)于Linux串口測試工具解析
由于已經(jīng)完成了***個(gè)HELLO程序,標(biāo)志著整個(gè)編譯環(huán)境已經(jīng)沒有問題了,下來準(zhǔn)備做一下串口測試程序。由于串口驅(qū)動(dòng)開發(fā)板已經(jīng)作好了,所以就作一個(gè)Linux串口測試工具簡單的數(shù)據(jù)收發(fā)看看。
- /* 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");
- /*將舊的通訊參數(shù)存入oldtio結(jié)構(gòu)*/
- 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作為通訊端口參數(shù)*/
- 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);
- /*還原舊參數(shù)*/
- tcsetattr(fd,TCSANOW,&oldtio);
- return 0;
- }
還有一點(diǎn)要注意,就是Linux串口測試工具串口有兩種工作模式,即正規(guī)模式和非正規(guī)模式,如果習(xí)慣在串口調(diào)試器中用16進(jìn)制發(fā)送,此時(shí)串口應(yīng)該為非正規(guī)模式才行。
下面是這兩種模式的說明
Linux串口測試工具正規(guī)模式(CANONICAL或者COOKED)
此模式下,終端設(shè)備會(huì)處理特殊字符,并且數(shù)據(jù)傳輸是一次一行的方式,既按回車后才開始發(fā)送和接收數(shù)據(jù)。例如LINUX的SHELL。
Linux串口測試工具非正規(guī)模式(NON-CANONICAL或者RAW)
此模式下,終端設(shè)備不會(huì)處理特殊字符,并且數(shù)據(jù)傳輸是一次一個(gè)字符的方式,既不用按回車換行。例如LINUX的VIM。
【編輯推薦】