qt 设置串口起始位_Qt 串口通信

本文介绍了在Qt中进行串口通信时,如何配置串口参数如波特率、数据位、停止位、奇偶校验等,并强调了在使用QextSerialPort、QSerialPort和libserial等串口通信类库时,数据接收不完整的问题。通过制定通信协议,设置起始和结束标志,可以确保串口通信的数据完整性。文中还展示了相关类库的实例代码,包括串口的打开、关闭、数据发送和接收方法。
摘要由CSDN通过智能技术生成

在Qt5之前,串口通信基本依赖于第三方库,下面是我曾接触过的串口通信类库:

以上串口通信类库通信过程基本是一下步骤,即:打开串口 > 配置串口参数 > 收发数据。

注意,串口参数(波特率、数据位、停止位、奇偶校验、流控等)必须在串口打开之后进行配置才有效。

在使用串口接收数据时,会出现数据接收不完整的情况,这种情况很常见,尤其是在 QextSerialPort 和 QSerialPort 中,有一段时间我不得不怀疑是不是参数或者是硬件问题。后来发现这并不是异常,在通信中我依赖 readAll() 函数获取串口数据,但 readAll() 由 readyRead()信号触发,readyRead在串口读到起始标志时立即发送,并不一保证一定是当前所发数据的起始部分。因此串口通信双方通信前应制定好通信协议,规定好数据的起始于结尾标志,串口当读到完整的起始于结束标志之后,才认定读完一条完整的数据。

下面分别就这三种串口通信类库进行实例代码的编写。

QextSerialPort使用小例

QextSerialPort在Window平台下可用Win_QextSerialPort进行串口通信,下面对Win_QextSerialPort再一次封装的串口通信类SerialPort:

头文件:serialport.h

1 #ifndef SERIALPORT_H2 #define SERIALPORT_H

3

4 #include

5

6

7

8 /**9 * @brief 串口参数10 */

11 structSerialConfig{12 int baudRate; //波特率

13 int characterSize; //传输位

14 int stopBits; //停止位

15 int parity; //校验位 0无校验 1奇校验 2偶校验16 //char*serialPort[20];//设备文件名

17 int flowControl; //流控

18 long timeOut; //超时时间

19 };20

21 classWin_QextSerialPort;22

23 /**24 * @brief 串口通信类25 */

26 class SerialPort : publicQObject27 {28 Q_OBJECT29 public:30

31 explicit SerialPort(QString portName, QObject *parent = 0);32 //~SerialPort();

33

34 /**35 * @brief 串口数据大发送格式36 */

37 enumSerialDataType{38 ASCLL=0, //ascll方式

39 HEX //二进制方式

40 };41 /**42 * @brief 配置串口参数43 * @param config44 */

45 void setSerila(SerialConfig *config);46

47 /**48 * @brief 获取串口开启状态49 * @return50 */

51 boolisOpend();52

53 /**54 * @brief 设置数据发送方式55 * @param type56 */

57 voidsetSerialDataType(SerialDataType type);58 signals:59 /**60 * @brief 串口获取到数据61 */

62 voidstrSerial(QString);63 publicslots:64

65

66 /**67 * @brief 开启串口68 * @param 串口参数69 * @return 是否成功打开串口70 */

71 bool op

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值