基於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 串列...