一、試驗概述
(1)試驗目的:掌握通過文件系統操作UART設備的方法.
(2)在linux中,所有設備都是以文件的形式被打開並進行讀/寫操作的,本試驗中使用POSIX兼容的文件操作接口函數對底層設備進行操作.其中,POSIX是Portable Operating System Interface for UNIX的首字母縮寫,是一套IEEE和ISO標准.
二、UART常用API函數
(1)打開某(設備)文件的操作函數
#include <unistd.h>
#include <fcntl.h>
int open(const char *path,int oflag)
函數功能:打開path所指的文件或(設備)文件,成功打開後返回文件描述符.
參數1:文件路徑或設備名.linux下的設備文件常存放在/dev目錄下.
參數2:打開方式.
O_RDONLY:只讀方式打開
O_RDONLY:只寫方式打開
O_RDWR:讀寫方式打開,等同於O_RDONLY|O_RDONLY
O_CREAT:如果文件不存在,則首先創建.
O_EXCL:獨占方式打開
O_NONBLOCK:采用非阻塞文件IO方式
(2)關閉某個(設備)文件
int close(int fd)
函數功能:關閉被打開的文件.
參數:該參數是文件或(設備)文件.
返回值:成功打開後返回0,失敗返回-1.
(3)讀某個(設備)文件
ssize_t read(int fd,void *buffer,size_t count)
函數功能:從已打開的文件中讀取數據
參數1:(設備)文件或設備句柄,通常由open()函數返回.
參數2:數據緩沖區.將讀到的數據存放在該緩存內.
參數3:要讀取的字節數.
返回值:成功讀取返回讀取的字節數,失敗返回-1.
(4)寫某個(設備)文件
ssize_t write(int fd,void *buffer,size_t count)
函數功能:向已打開的(設備)文件中寫入數據
參數1:(設備)文件或設備句柄,通常由open()函數返回.
參數2:數據緩沖區.將緩存內的數據寫入某個(設備)文件中.
返回值:成功寫入後返回寫入的字節數,失敗返回-1.
(5)獲取串口屬性
int tcgetattr(int fd,struct termios *option)
函數功能:獲取串口終端的屬性值
參數1:由open()函數打開串口設備文件的文件描述符
參數2:串口屬性結構體指針(termios的結構體)
Attention!!!
結構體termios在文件/usr/include/bits/termios.h中定義.
struct termios
{
unsigned int c_iflag; //輸入參數
unsigned int c_oflag; //輸出參數
unsigned int c_cflag; //控制參數
unsigned int c_lflag; //局部控制參數
unsigned char c_cc[NCCS];//控制字符
unsigned int c_ispeed; //輸入波特率
unsigned int c_ospeed; //輸出波特率
}
(6)設置串口屬性
int tcsetattr(int fd,int optace,const struct termios *option)
函數功能:設置串口終端的屬性
參數1:由open()函數打開串口設備文件的文件描述符
參數2:該參數有3個選項可供選擇
TCSANOW:不等數據傳輸完畢就立即改變串口的屬性
TCSADRAIN:等待數據傳輸完畢才改變串口的屬性
TCSAFLUSH:清空輸入輸出緩沖區才改變屬性
參數3:串口屬性結構體指針,由tcgetattr()函數得到.