基于嵌入式Linux下串口應用編程的研究
設置串口設備之前,需要先獲取當前串口設備的屬性,這是因為結構體termios的成員都是和特定寄存器對應的,如果不先獲取以前的狀態(tài),可能將寄存器中的值全部覆蓋,從而導致通信失敗,并且在操作完串口設備以后,需要將串口設備的屬性恢復到以前的值。獲取當前串口設備屬性的過程如下:
tcgetattr(fd,new_cfg); / /從f d代表的串口設備中獲取當前的狀態(tài)并將其保存在new_cfg中。
接下來是將串口設備設置為原始模式,在本系統(tǒng)中需要使用原始模式進行通信。
cfmakeraw(new_cfg);
將串口通信的字符大小設為8個字符new_cfg.c_cflag = ~CSIZE;
new_cfg.c_cflag |= CS8;
設置波特率
cfsetispeed(new_cfg,BARDRATE); / / 設
置輸入波特率
cfsetospeed(new_cfg,BARDRATE); / / 設
置輸出波特率
設置奇偶校驗位,不適用奇偶校驗
new_cfg.c_cflag = ~PARENB;
new_cfg.c_iflag = ~INPCK;
設置停止位,使用一個byte
new_cfg.c_cflag = ~CSTOPB;
設置讀取字符大小以及等待時間
new_cfg.c_cc[VTIME]=50; //兩個字符之間
等待超過5s返回
new_cfg.c_cc[VMIN]=1; //最少讀取一個
字符
清除串口緩存
該操作是必不可少的,否則會導致串口通信失敗。
tcflush(fd,TCIOFLUSH);
其中TCIOFLUSH表示清空串口的緩存。
接下來需要激活配置if((tcsetattr(fd,TCSANOW,new_cfg))!=0)
{
// perror(”tcsetattr“);
return 1;
}
串口初始化、串口屬性的設置的流程圖,如圖1所示。
2.串口的讀寫和關閉
利用串口通信的過程就是對串口設備的讀寫過程,只需要利用read()函數(shù)和write()函數(shù)對打開的串口設備的文件描述符操作即可。
在操作完串口退出程序時,需要將打開的串口關閉,這個過程和關閉普通的文件一樣,調用close()函數(shù)即可完成。
四、結束語
本文以指紋識別系統(tǒng)的串口編程為例,闡述了Linux系統(tǒng)下,串口編程的具體設置方法,在本文的基礎上再添加上層軟件的設計即可完成一個指紋識別系統(tǒng)。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論