两个定时器实现串口热插拔思路介绍

本文介绍了一种通过定时器实现的串口搜索与连接机制。详细解释了如何使用Python的serial库遍历所有可用串口,尝试连接,并通过发送特定数据包验证串口是否正确。同时,阐述了定时器在串口监测中的作用,包括如何在串口连接成功后切换定时器的任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.打开软件的同时打开定时器Timer1,

         Timer1主要做搜索串口,如果没搜索到,就提示“未搜索到串口”,如果搜到了,就打开串口,这里可能会连接多个设备,如果要打开指定的设备,就需要遍历串口号去发送一个数据,同时设备要有一个返回值才行,这样就可以打开指定的串口了,打开串口之后打开定时器Timer2

    def detect_serial(self):
        port_list = []
        exist_flag = False
        com_list = []
        com_list.clear()
        port_list.clear()
        com_list = list(serial.tools.list_ports.comports())

        if len(com_list) == 0:
            exist_flag = False
        else:
            exist_flag = True
            for item in com_list:
                com = item.device
                port_list.append(com)

        if exist_flag == True:
            for port in port_list:
                self.m_th.m_ser.port = port
                if self.m_th.m_ser.is_open == True:
                    self.m_th.m_ser.write(b'\x00')  #与单片机串口连接
                else:
                    self.m_th.m_ser.open()
                    self.m_th.m_ser.write(b'\x00')
                time.sleep(0.1)
                rdata = self.m_th.m_ser.read_all()
                print(rdata)
                if rdata == b'\x00':
                    print(rdata)
                    self.serial_timer.stop()
                    if self.judge_serial_timer.isActive() == False:
                        self.judge_serial_timer.start()
                    QtWidgets.QMessageBox.information(self,'提示', '串口已连接!')
                    return
        else:
            QtWidgets.QMessageBox.information(self, '提示', '未找到串口!')

2.定时器搜索到串口打开之后打开定时器Timer2并关闭定时器Timer1

        定时器Timer2主要是搜索串口,如果搜到则什么都不执行,如果搜索到串口数量为0,则打开定时器Timer1并关闭定时器Timer2

    def judge_serial(self):
        com_list = list(serial.tools.list_ports.comports())
        if len(com_list) > 0:
            pass
        else:
            self.judge_serial_timer.stop()
            self.serial_timer.start()

好像只能处理连一个串口时的情况,现在先写这么多,以后有更好的方法再更吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值