• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Linux串口編程

    標簽: 嵌入式  串口

    • 串口通信是指一次只傳送一個數據位。雖然在通信的時候串口有 8 位或者 9 位等,但是在物理層面傳輸的時候,它仍然是以單個 bit 的方式傳輸的
    • 一般特指 RS232 標準的接口
    • 在 linux 下串口編程流程如下:
      這里寫圖片描述

    打開串口

    核心是用open函數打開串口

    if((fd = open(uart3,O_RDWR|O_CREAT,0777))<0){
            printf("open %s failed!\n",uart3);
        }
        else{
            printf("open %s is success!\n",uart3);
        }

    串口初始化

    初始化一般無論在哪個平臺都有現成代碼,直接使用即可。這里的接口形式為int set_opt(int fd,int nSpeed, int nBits, char nEvent, int nStop)

    • fd為串口句柄
    • nSpeed為設置的波特率
    • nBites為數據位
    • nEvent為校驗位
    • nStop為停止位
    • 例如set_opt(fd, 115200, 8, 'N', 1);

    串口發送

    核心是通過write函數傳送數據

    if((fd = open(uart3, O_RDWR|O_NOCTTY|O_NDELAY))<0){
            printf("open %s is failed",uart3);
        }
        else{
            printf("open %s is success\n",uart3);
            set_opt(fd, 115200, 8, 'N', 1); 
            while(i--)
            {
                wr_static = write(fd,buffer, strlen(buffer));
                if(wr_static<0)
                    printf("write failed\n");
                else{
                    printf("wr_static is %d\n",wr_static);
                }
                sleep(1);
            }
        }
        close(fd);

    串口接收

    核心是通過read和write來讀取數據

    if((fd = open(uart3, O_RDWR|O_NOCTTY))<0)
            printf("open %s is failed",uart3);
        else{
            set_opt(fd, 115200, 8, 'N', 1);
            write(fd,uart_out, strlen(uart_out));
            while(1){
                while((nByte = read(fd, buffer, 512))>0){
                    buffer[nByte+1] = '\0';         
                    write(fd,buffer,strlen(buffer));
                    memset(buffer, 0, strlen(buffer));
                    nByte = 0;
                }
            }
        }
    版權聲明:本文為kakascx原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/kakascx/article/details/82740285

    智能推薦

    C——Linux下的串口編程(轉)

    之前在學習安信可A7模塊時,是在PC上使用串口調試助手做了GPS的坐標數據信息的采集,同時分析了一些語句的含義。在這過程中,涉及到對嵌入式開發人員一個非常重要的知識:串口通信。在前篇也說到,我們將會自己寫程序來對GPS數據進行解析,而這些數據正是靠串口來傳輸的。所以,本篇博文將進行關于串口通信的學習。 一、串口接頭 首先我們得知道串口長什么樣,常用的串口接頭有兩種,一種是9針串口(簡稱DB-9),...

    Linux下C語言串口應用編程

    在編寫Linux串口的C程序之前,需要包含以下頭文件: #include <termios.h> 在Linux系統中,一切皆文件,所以串口設備也是一類文件,學習過Linux驅動程序的學員都知道,Linux有三類設備:字符設備,塊設備,網絡設備。那么串口設備屬于字符設備。所以串口設備的命名一般為/dev/ttySn(n = 0、1、2......),如果該串口為USB轉串口,可能名稱為/...

    Linux 串口編程簡介和實例學習

    Linux 串口編程簡介和實例學習 一、無論是從linux官方直接下載的原生態內核還是任何一家芯片廠家提供的linux內核,都已經把串口驅動寫好了,所以在linux串口編程中,是完全不需要動手去寫串口驅動的。對于一般的程序員來說涉及比較多的是串口應用編程,這里我們就介紹一下如何調用內核提供的接口,如何進行初始化配置以及發送和接收數據。 二、查看串口設備節點,在linux系統,串口的設備節點以tty...

    linux 多線程串口編程總結

    最近在玩DJI M100,調用API獲取GPS位置時發現高程定位完全是錯的(負的幾百多米),查了一下文檔說高程數據是由氣壓計得到的,而飛行控制時又需要比較可靠的高度信息,于是乎決定用上我們實驗室的搭載Ublox芯片的板子搞事情,在子線程通過串口接收板子的定位結果,在主線程調用,開發環境為Ubuntu16.04/14.04,前者為虛擬機,后者為manifold。 1.  &nbs...

    Linux下串口編程流程介紹

    目錄 一、串口編程中struct termios結構體 二、使用串口流程 1、打開串口 2、串口配置流程 a、tcgetattr() 與 tcsetattr()控制終端 b、cfsetispeed() 與 cfsetospeed()設置波特率 c、使用掩碼設置數據位 d、使用c_cflag和c_iflag設置奇偶校驗 e、設置停止位 f、設置最少字符和等待時間 3、讀寫數據 4、關閉串口 &ems...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡