歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Linux下的UART試驗

一、試驗概述
   
    (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()函數得到.

Copyright © Linux教程網 All Rights Reserved