1. 程式人生 > >Linux下讀寫UART串列埠的程式碼

Linux下讀寫UART串列埠的程式碼

Linux下讀寫UART串列埠的程式碼,從IBM Developer network上拿來的東西,操作比較的複雜,就直接跳過了,好在程式碼能用,記錄一下~

兩個有用的函式~

  1. ////////////////////////////////////////////////////////////////////////////////
  2. /** 
  3. *@brief  設定串列埠通訊速率 
  4. *@param  fd     型別 int  開啟串列埠的檔案控制代碼 
  5. *@param  speed  型別 int  串列埠速度 
  6. *@return  void 
  7. */
  8. int speed_arr[] = {B115200, B38400, B19200, B9600, B4800, B2400, B1200, B300,  
  9.                    B115200, B38400, B19200, B9600, B4800, B2400, B1200, B300, };  
  10. int name_arr[] = {115200, 38400, 19200, 9600, 4800, 2400, 1200,  300,   
  11.                   115200, 38400, 19200, 9600, 4800, 2400, 1200,  300, };  
  12. void set_speed(int fd, int speed){  
  13.   int   i;   
  14.   int   status;   
  15.   struct termios   Opt;  
  16.   tcgetattr(fd, &Opt);   
  17.   for ( i= 0;  i < sizeof(speed_arr) / sizeof(int
    );  i++) {   
  18.     if  (speed == name_arr[i]) {       
  19.       tcflush(fd, TCIOFLUSH);       
  20.       cfsetispeed(&Opt, speed_arr[i]);    
  21.       cfsetospeed(&Opt, speed_arr[i]);     
  22.       status = tcsetattr(fd, TCSANOW, &Opt);    
  23.       if  (status != 0) {          
  24.         perror("tcsetattr fd1"
    );    
  25.         return;       
  26.       }      
  27.       tcflush(fd,TCIOFLUSH);     
  28.     }    
  29.   }  
  30. }  

  1. ////////////////////////////////////////////////////////////////////////////////
  2. /** 
  3. *@brief   設定串列埠資料位,停止位和效驗位 
  4. *@param  fd     型別  int  開啟的串列埠檔案控制代碼 
  5. *@param  databits 型別  int 資料位   取值 為 7 或者8 
  6. *@param  stopbits 型別  int 停止位   取值為 1 或者2 
  7. *@param  parity  型別  int  效驗型別 取值為N,E,O,,S 
  8. */
  9. int set_Parity(int fd,int databits,int stopbits,int parity)  
  10. {   
  11.     struct termios options;   
  12.     if  ( tcgetattr( fd,&options)  !=  0) {   
  13.         perror("SetupSerial 1");       
  14.         return(FALSE);    
  15.     }  
  16.     options.c_cflag &= ~CSIZE;   
  17.     switch (databits) /*設定資料位數*/
  18.     {     
  19.     case 7:       
  20.         options.c_cflag |= CS7;   
  21.         break;  
  22.     case 8:       
  23.         options.c_cflag |= CS8;  
  24.         break;     
  25.     default:      
  26.         fprintf(stderr,"Unsupported data size\n"); return (FALSE);    
  27.     }  
  28.     switch (parity)   
  29.     {     
  30.         case'n':  
  31.         case'N':      
  32.             options.c_cflag &= ~PARENB;   /* Clear parity enable */
  33.             options.c_iflag &= ~INPCK;     /* Enable parity checking */
  34.             break;    
  35.         case'o':     
  36.         case'O':       
  37.             options.c_cflag |= (PARODD | PARENB); /* 設定為奇效驗*/
  38.             options.c_iflag |= INPCK;             /* Disnable parity checking */
  39.             break;    
  40.         case'e':    
  41.         case'E':     
  42.             options.c_cflag |= PARENB;     /* Enable parity */
  43.             options.c_cflag &= ~PARODD;   /* 轉換為偶效驗*/
  44.             options.c_iflag |= INPCK;       /* Disnable parity checking */
  45.             break;  
  46.         case'S':   
  47.         case's':  /*as no parity*/
  48.             options.c_cflag &= ~PARENB;  
  49.             options.c_cflag &= ~CSTOPB;break;    
  50.         default:     
  51.             fprintf(stderr,"Unsupported parity\n");      
  52.             return (FALSE);    
  53.         }    
  54.     /* 設定停止位*/
  55.     switch (stopbits)  
  56.     {     
  57.         case 1:      
  58.             options.c_cflag &= ~CSTOPB;    
  59.             break;    
  60.         case 2:      
  61.             options.c_cflag |= CSTOPB;    
  62.            break;  
  63.         default:      
  64.              fprintf(stderr,"Unsupported stop bits\n");    
  65.              return (FALSE);   
  66.     }   
  67.     /* Set input parity option */
  68.     if (parity != 'n')     
  69.         options.c_iflag |= INPCK;   
  70.     tcflush(fd,TCIFLUSH);  
  71.     options.c_cc[VTIME] = 150; /* 設定超時15 seconds*/
  72.     options.c_cc[VMIN] = 0; /* Update the options and do it NOW */
  73.     if (tcsetattr(fd,TCSANOW,&options) != 0)     
  74.     {   
  75.         perror(

    相關推薦

    LinuxUART串列程式碼

    Linux下讀寫UART串列埠的程式碼,從IBM Developer network上拿來的東西,操作比較的複雜,就直接跳過了,好在程式碼能用,記錄一下~ 兩個有用的函式~ //////////////////////////////////////////////////////

    Linux用C實現串列

     http://hi.baidu.com/weiweisuo1986/item/b33200134ceaac6871d5e81d         之前要做一個和串列埠相關的專案,才認真研究了下串列埠,首先就是要實現串列埠和PC機的通訊。          串列埠的驅動一般不需要我們寫,都是很成熟的驅動

    Linux學習筆記-Linux檔案

    在Linux程式設計需要讀寫檔案時,有兩種方式: (1)ANSIC: 使用stdio.h裡的函式。fopen, fclose, fwrite, fread (2)Linux API:Linux提供了另外一套API用於操作檔案。open, clos

    LinuxFLASH驅動——MTD裝置分析

      最近在學習驅動讀寫flash的程式碼部分。經歷了可笑的過程:開始我知道flash用通過spi口來讀寫。所以就到了driver/spi 下面看相關程式碼。發現有個spidev.c裡面有read/write/ioctl等函式。而且還有一個davinci_spi_

    java linux中文

    import java.io.*; import java.text.SimpleDateFormat; import java.util.*; public class TestFile {     //寫檔案,支援中文字元,在linux redhad下測試過     p

    linux串列程式後,利用windows上的串列除錯助手互發資料

    我是用QT4在Linux上寫的串列埠程式,具體的程式碼就不寫了,網上搜一下很多。這裡主要說一下寫完程式碼之後,之前也行。要做的事情。 1,使用命令在終端上檢視有哪些串列埠驅動。 可以看出ttyS0 ttyS1能用 .一般ttyS0指com1,ttyS1指co

    用控制元件(CMSComm)串列程式碼(高效率,不同於網上常見的,決沒有抄襲)!

    讀串列埠的程式碼在網上是鋪天蓋地,但他們幾乎完全是一樣的,第一個人寫出來的才是英雄,其它的不是。這段程式碼類似於下面: VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[204

    linux UART串列驅動開發

    內容簡介: 介紹了Linux下的串列埠驅動的設計層次及介面, 並指出串列埠與TTY終端之間的關聯層次(串列埠可作TTY終端使用), 以及Linux下的中斷處理機制/中斷共享機制, 還有串列埠緩衝機制當中涉及的軟中斷機制; 其中有關w83697/w83977 IC方面的知識, 具體參考相關手冊, 對串列埠的配

    AM335XLinux使用所有6個串列,包括UART4、UART5

    AM335X開發板總共有6個串列埠,其中因為UART4和UART5與其他功能複用,所以我們在使用的時候,並不使用所有串列埠。但是有的時候,我們恰恰是要用到儘量多的串列埠,這種情況下,則可以簡單的修改一下核心程式碼。UART4和UART5功能複用情況如下: UART4 和 can 功能有衝

    linux裝置驅動,tty串列程式設計 如何檢視linux串列是否可用?串列名稱等

    如何檢視linux下串列埠是否可用?串列埠名稱等? 檢視串列埠是否可用,可以對串列埠傳送資料比如對com1口,echo lyjie126 > /dev/ttyS0 檢視串列埠名稱使用 ls -l /dev/ttyS* 一般情況下串列埠的名稱全部在dev下面,如果你沒

    linux常用程式碼操作

    1、讀程式碼less命令:[[email protected] scripts]$ less -N ChangeLog-N 表示顯示行號Enter顯示下一行g定位到文字第一行G定位到文字最後一行f下翻一頁(forward)b上翻一頁(back)2、vim命令:(1)

    UNICODE環境txt文件操作

    clas c程序 delete tag 編碼 eno 字符編碼 empty readline 內容轉載自http://blog.sina.com.cn/s/blog_5d2bad130100t0x9.html UNICODE環境下讀寫txt文件操作 (2011-07

    Linux ttyUSB*許可權獲取

      1. 檢視ttyUSB裝置      如果檢視所有tty裝置可以將ttyUSB* 改為tty* 2. 單次生效     本條指令的生效週期是本次關比機器之前 3. 永久生效 &

    dd命令測試linux磁碟速度操作

    1、先熟悉兩個特殊的裝置:     (1)/dev/null:回收站、無底洞。     (2)/dev/zero:產生字元。 2、測試磁碟寫能力     time dd if=/dev/zero of=/testw.dbf bs=4k

    Linux嵌入式開發環境之串列配置

    開發平臺:Ubuntu 串列埠工具:putty 安裝方法:su apt-get install putty 串列埠使用方法: 1、將串列埠連線至PC,在命令列輸入putty,開啟putty介面 2、將連線方式設為serial,裝置選擇為/dev/ttyUSB0(本機為USB轉串列埠,其他情況可嘗試/

    windowsC語言版串列接收程式(基於VS2017)

    #include "pch.h" #define _CRT_SECURE_NO_WARNINGS  #include <iostream> #include <stdio.h> #include <windows.h> #include <s

    windowsC語言版串列傳送程式(基於VS2017)

    #include "pch.h" #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <windows.h> #include <string.h> #include <conio.h&

    UART串列通訊淺談之(三)--字元與資料的轉換

    版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/solar_Lan/article/details/78093692 學串列埠通訊的應用主要是實現微控制器和電腦之間的資訊互發,可以用電腦控制微控制器的一些資訊,可以把微控制器的一些資訊狀況發給電腦

    UART串列通訊淺談之(二)--暫存器設定

    1.1 通訊的三種基本型別 常用的通訊通常可以分為單工、半雙工、全雙工通訊。 單工就是指只允許一方向另外一方傳送資訊,而另一方不能回傳資訊。比如我們的電視遙控器,我們的收音機廣播等,都是單工通訊技術。 半雙工是指資料可以在雙方之間相互傳播,但是同一時刻只能其中一方發給另外一方,

    UART串列通訊淺談之(一)--基礎概述

    通訊按照傳統的理解就是資訊的傳輸與交換。UART(Universal Asynchronous Receiver/Transmitter,即通用非同步收發器)序列通訊是微控制器最常用的一種通訊技術,通常用於微控制器和電腦之間以及微控制器和微控制器之間的通訊。 以下我們以STC98C52微控制器為