Linux串口測試工具簡單程序代碼解析
由于已經完成了第一個HELLO程序,標志著整個編譯環境已經沒有問題了,下來準備做一下串口測試程序。由于串口驅動開發板已經作好了,所以就作一個Linux串口測試工具簡單的數據收發看看。
Linux串口測試工具網上常見的版本都看起來比較煩瑣,下面是一個簡單一點的,這個程序功能是收到10個字節后會發前7個字節,如果所發的數據的第一個字節是9則退出。
/* 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。
【編輯推薦】