歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux下的UART試驗

Linux下的UART試驗

日期:2017/3/1 9:56:50   编辑:Linux編程

一、試驗概述
  
(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