Linux下基於QT串列埠程式設計測試一

2021-06-23 07:18:22 字數 3554 閱讀 5326

環境:主機:fedora12

開發軟體:qt

目標板:mini6410

實現功能:

目標板接收pc串列埠傳過來的資訊並在終端輸出,目標板串列埠接收資訊用select機制

源**:

widget.h:

[cpp]view plain

copy

#ifndef widget_h

#define widget_h

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include "qthread"

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include "sys/select.h"

#include "termios.h"

namespace ui   

class widget : public qwidget  

;  //埠資訊定義

typedef

struct _port_info  

*port_info;  

//開啟串列埠

int open_port(char *port);  

//關閉串列埠

void close_port(int fd);  

//根據波特率獲得波特率設定引數

int get_baud_rate(unsigned long baud_rate);  

//設定埠引數

int set_port(port_info p_info);  

//通過串列埠傳送資料,只能寫compress_byte長度資料,傳送時加檔案頭"jdh"

int send_data(int fd,char *data,int data_len);  

#endif // widget_h

widget.c:

[cpp]view plain

copy

#include "widget.h"

#include "ui_widget.h"

int fd_com;  

#define com "/dev/ttysac1"

char buffer_com[1024 + 10];  

char buffer_read_com[1024];  

int send_index;  

//開啟串列埠

int open_port(char *port)  

}  //關閉指定串列埠

void close_port(int fd)  

//根據波特率獲得響應的波特率設定引數

int get_baud_rate(unsigned long baud_rate)  

}  //設定埠

int set_port(port_info p_info)  

case

'1':  

case

'2':  

}  //設定資料位

new_opt.c_cflag &= ~csize;  

switch (p_info->data_bits)  

case

'6':  

case

'7':  

case

'8':  

default:  

}  //設定奇偶校驗位

switch (p_info->parity)  

case

'1':  

case

'2':  

}  //設定停止位

if (p_info->stop_bit == '2')  

else

//修改輸出模式,原始資料輸出

new_opt.c_oflag *= ~opost;  

//修改控制字元,讀取字元最小個數為1

new_opt.c_cc[vmin] = 1;  

//修改控制字元,讀取第乙個字元等待等待1 *(1/10)s

new_opt.c_cc[vtime] = 1;  

//如果發生資料溢位,接收資料,但是不再讀取

tcflush(p_info->port_fd,tciflush);  

int result;  

result = tcsetattr(p_info->port_fd,tcsanow,&new_opt);  

if (result == -1)  

tcgetattr(p_info->port_fd,&old_opt);  

return result;  

}  widget::widget(qwidget *parent) :  

qwidget(parent),  

ui(new ui::widget)  

int err = 0;  

struct timeval wait_time;  

fd_set read_fds;  

int len_com = 0;  

char *data = "jdh";  

int len = write(fd_com,data,3);  

if (len != 3)  

while (1)  

else

}  //讀取串列埠音效卡

//判斷音效卡是否允許讀,不允許讀退出

if (fd_isset(fd_com,&read_fds))  

}  qdebug() << "end";  

}  widget::~widget()    

說明:

串列埠在驅動中有乙個快取區,收到的資料會存放在裡面,如果一次傳送資料很多,而讀取間隔很短,則每次讀取都是整個資料報的片段.

Linux下基於QT串列埠程式設計測試一

linux下基於qt串列埠程式設計測試一 環境 主機 fedora12 開發軟體 qt 目標板 mini6410 實現功能 目標板接收pc串列埠傳過來的資訊並在終端輸出,目標板串列埠接收資訊用select機制 源 widget.h ifndef widget h define widget h in...

Linux下基於QT串列埠程式設計測試一

linux下基於qt串列埠程式設計測試一 環境 主機 fedora12 開發軟體 qt 目標板 mini6410 實現功能 目標板接收pc串列埠傳過來的資訊並在終端輸出,目標板串列埠接收資訊用select機制 源 widget.h ifndef widget h define widget h in...

Linux下基於QT串列埠程式設計測試二

linux下基於qt串列埠程式設計測試二 環境 主機 fedora12 開發軟體 qt 目標板 mini6410 實現功能 目標板接收pc串列埠傳過來的資訊並在終端輸出,輸出是每次讀8個位元組,然後輸出.說明 這一次採用的是開源類qextserialbase提供的串列埠功能,感謝原作者。以下是他的 ...