window串口编程

本文介绍了Win32环境下通过ActiveX控件和Windows API实现串口通信的方法,强调了API函数的灵活性但复杂性。详细讲解了串口通信的同步与异步操作,包括打开串口、配置串口、读写串口和关闭串口的步骤,并提供了相关函数的使用示例,如CreateFile、DCB结构、ReadFile和WriteFile等。
摘要由CSDN通过智能技术生成
Win32下,可以使用两种编程方式实现串口通信。
一、使用ActiveX控件,优点是简单,缺点是欠灵活
二、使用windows的API函数,优点是可以清楚的掌握串口通信的机制、灵活
    确定是比较复杂


串口操作可以有两种方式:同步、异步。用编程语言说就是阻塞、非阻塞。
它们都有四个步骤:
   1、打开串口
   2、配置串口
   3、读写串口
   4、关闭串口


1、打开串口
   Win32系统把文件的概念进行了扩展。无论是文件、通信设备、命名管道、邮件槽、磁盘、控制台,都是用API函数CreateFile打开/创建
HANDLE CreateFileA(
LPCTSTR lpFileName,        //文件名
DWORD   dwDesiredAccess,   //访问方式(read,write,r/w)
DWORD dwShareMode,       //文件共享方式
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
  //安全模式
DWORD   dwCreationDisposition, //文件存在时的创建方式
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt是Python编程语言和Qt应用程序框架的桥梁,Qt是一个跨平台的C++开发框架,可以用于开发GUI应用程序。所以我们可以利用PyQt来开发一个串口调试助手。下面是一个简单的实现示例: ```python import sys from PyQt5.QtWidgets import QApplication, QWidget, QComboBox, QPushButton, QTextEdit, QLabel from PyQt5.QtSerialPort import QSerialPort, QSerialPortInfo class SerialDebug(QWidget): def __init__(self): super().__init__() self.port = QSerialPort() self.port.setBaudRate(QSerialPort.Baud9600) self.init_ui() def init_ui(self): self.setGeometry(300, 300, 400, 300) self.setWindowTitle('Serial Debug') self.port_combo = QComboBox(self) self.port_combo.setGeometry(10, 10, 100, 30) self.refresh_port_list() self.baudrate_combo = QComboBox(self) self.baudrate_combo.setGeometry(120, 10, 100, 30) self.baudrate_combo.addItems(['9600', '115200']) self.open_btn = QPushButton('Open', self) self.open_btn.setGeometry(230, 10, 60, 30) self.open_btn.clicked.connect(self.open_port) self.send_btn = QPushButton('Send', self) self.send_btn.setGeometry(300, 10, 60, 30) self.send_btn.clicked.connect(self.send_data) self.recv_text = QTextEdit(self) self.recv_text.setGeometry(10, 50, 350, 200) self.send_text = QTextEdit(self) self.send_text.setGeometry(10, 260, 350, 30) def refresh_port_list(self): self.port_combo.clear() port_info_list = QSerialPortInfo.availablePorts() for port_info in port_info_list: self.port_combo.addItem(port_info.portName()) def open_port(self): if not self.port.isOpen(): port_name = self.port_combo.currentText() self.port.setPortName(port_name) baudrate = int(self.baudrate_combo.currentText()) self.port.setBaudRate(baudrate) self.port.open(QSerialPort.ReadWrite) self.port.readyRead.connect(self.recv_data) self.open_btn.setText('Close') else: self.port.close() self.open_btn.setText('Open') def send_data(self): if self.port.isOpen(): data = self.send_text.toPlainText().encode('utf-8') self.port.write(data) def recv_data(self): data = self.port.readAll().data().decode('utf-8') self.recv_text.insertPlainText(data) if __name__ == '__main__': app = QApplication(sys.argv) win = SerialDebug() win.show() sys.exit(app.exec_()) ``` 这个例子中,我们创建了一个窗口,包含了串口选择、波特率选择、打开/关闭串口等按钮和接收/发送文本框。 在init_ui函数中,我们创建了窗口中的各个控件,并且将打开串口按钮的clicked信号连接到open_port函数,将发送数据按钮的clicked信号连接到send_data函数。在open_port函数中,我们根据选择的串口名和波特率设置串口参数,并且打开串口。如果串口已经打开,则关闭串口。在send_data函数中,我们将发送文本框中的内容转换成UTF-8编码的字节流,并且通过串口发送。在recv_data函数中,我们接收串口数据,并且将其解码后显示在接收文本框中。 通过这个例子,你可以了解如何使用PyQt和PyQtSerialPort模块来开发一个简单的串口调试助手。你可以根据自己的需求,对代码进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值