Linux串列埠學習

2021-08-20 16:25:09 字數 3019 閱讀 3384

基於linux的串列埠程式設計,包括一些串列埠配置,自己學習當作筆記記錄。參考linux程式設計

myserial.h

#ifndef __serial_h__

#define __serial_h__

#include #include #include #include #include #include #include #include /*

* 波特率

*/enum mybaudrate

;class myserial

/*

* 函式介紹: 獲取串列埠名字

* * 輸入引數: 無

** 輸出引數: 串列埠名字

** 返回值 : 無

*/void getserialname(char *name)

private:

int m_fd; //! 裝置描述符

int m_is_open; //! 開啟狀態,0開啟,-1關閉

char* m_name; //! 串列埠名稱

};#endif

myserial.cpp

#include #include "myserial.h"

myserial::myserial(const char* name) : m_name(new char[strlen(name)+1]), m_fd(-1),

m_is_open(-1)

myserial::myserial(const myserial& s) : m_name(new char[strlen(s.m_name)+1]), m_fd(s.m_fd),

m_is_open(s.m_is_open)

const myserial& myserial::operator=(const myserial& s)

return *this;

}myserial::~myserial()

int myserial::openserial()

m_is_open = 0;

return 0;

}int myserial::closeserial()

m_is_open = -1;

return 0;

}int myserial::setspeed(int speed)

tcflush(m_fd, tcioflush);

switch(speed) //! 配置波特率

if(tcsetattr(m_fd, tcsanow, &opt) != 0) //! 設定波特率

tcflush(m_fd, tcioflush);

return 0;

}int myserial::setproperty(int databit, int stopbit, int checkbit)

options.c_cflag |= (clocal | cread); //! 忽略modem控制線,使能讀

options.c_lflag &= ~(icanon | echo | echoe | isig); //! 配置原始模式

options.c_cflag &= ~csize; //! 遮蔽字元掩碼

switch(databit) //! 配置字元掩碼

switch(stopbit) //! 配置停止位

switch(checkbit) //! 配置校驗方式

if(tcsetattr(m_fd, tcsanow, &options) != 0) //! 設定串列埠屬性

return 0;

}int myserial::readserial(char *data, const int datalen)

if(retval > 0)

}if(retval == -1)

return ret;

}int myserial::writeserial(const char* data, const int datalen)

return ret;

}

main.cpp

#include #include #include "myserial.h"

int main(int argc, char *argv)

char *ptr = argv[2];

char *dev = argv[1];

myserial *serial = new myserial(dev);

if(serial->openserial() < 0)

printf("m_fd is -------------->%d\n", serial->getstatu());

char name[30] = "0";

serial->getserialname(name);

printf("dev name is --------> %s\n",name);

if(serial->setspeed(b_115200) < 0)

if(serial->setproperty(8,1,0) < 0)

if(serial->writeserial(ptr,strlen(ptr)) < 0)

int temp = 0;

char buffer[24];

while(1)

else}}

serial->closeserial();

return 0;

}

簡單實現自收自發,如有錯誤請提出,共同進步!!!

Linux串列埠除錯

在第一次除錯linux串列埠驅動的時候,一定要保證與linux串列埠通訊的器件是沒有問題可以使用的,然後我們再進行串列埠操作的學習,否則也許可能碰到問 題的時候不知如何處理了。好了,在保證硬體已經沒有問題的情況下,我們開始學習串列埠驅動模組的使用。pc上的串列埠不比嵌入式,你可以在了解了暫存器之後操...

linux串列埠除錯

在第一次除錯linux串列埠驅動的時候,一定要保證與linux串列埠通訊的器件是沒有問題可以使用的,然後我們再進行串列埠操作的學習,否則也許可能碰到問題的時候不知如何處理了。好了,在保證硬體已經沒有問題的情況下,我們開始學習串列埠驅動模組的使用。pc上的串列埠不比嵌入式,你可以在了解了暫存器之後操作...

Linux 串列埠通訊

011 08 03 13 04 389人閱讀收藏 舉報以前跟著做過vxworks的開發,主要通訊方式是串列埠,因為底層bsp包已經做好了,串列埠通訊非常簡單。後來接觸linux,在一塊ok6410上跑linux串列埠通訊,才發現原來天真的以為甚是簡單的串列埠變得如此的不簡單。include 1 串列...