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

2021-08-26 11:36:18 字數 2999 閱讀 9868

linux下基於qt串列埠程式設計測試一

環境:主機:fedora12

開發軟體:qt

目標板:mini6410

實現功能:

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

源**:

widget.h:

#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:

#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串列埠程式設計測試一

環境 主機 fedora12 開發軟體 qt 目標板 mini6410 實現功能 目標板接收pc串列埠傳過來的資訊並在終端輸出,目標板串列埠接收資訊用select機制 源 widget.h cpp view plain copy ifndef widget h define widget h inc...

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

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