Python如何读写USB HID设备实现环回测试

 更新时间:2026年09月23日 09:09:43   作者:luotong86  
想知道怎么用Python读写USB设备吗?本文以STM32F411模拟HID设备为例,手把手教你使用PyUSB库进行USB通信和环回测试,提供完整代码示例,帮你轻松搞定Python USB编程

python读写USB端口

  • 系统:WIN10 64位
  • python版本:3.6.5
  • USB设备:STM32F411

STM32F411模拟了一个简单的HID设备,有一个IN端口和一个OUT端口,当OUT端口收到数据后,再把收到的数据写回到IN端口,这样就可以做一个环回测试

代码:

import usb.core
import usb.util
import sys
import threading
import time

VID=0x0483
PID=0x5750
 
dev =  usb.core.find(idVendor=VID, idProduct=PID)
cfg = dev.get_active_configuration()
intf = cfg[(0,0)]

print(intf)

write_ep = usb.util.find_descriptor(
    intf,
    custom_match = \
    lambda e: \
        usb.util.endpoint_direction(e.bEndpointAddress) == \
        usb.util.ENDPOINT_OUT
)

read_ep = usb.util.find_descriptor(
    intf,
    custom_match = \
    lambda e: \
        usb.util.endpoint_direction(e.bEndpointAddress) == \
        usb.util.ENDPOINT_IN
    )

def write_endpoint_thread():
    while True:
        try:
            write_ep.write("0123456789")
        except:
            print("write error")
    

def read_endpoint_thread():
    while True:
        try:
            data = read_ep.read(64)
            size = len(data)
            if size > 0:
                print("recv %d bytes:"%size,end='')
                for i in range(0,size):
                    print ("%c"%data[i],end='')
                print ('')
        except:
            print("no data")

    

def main():
    r = threading.Thread(target=read_endpoint_thread)
    w = threading.Thread(target=write_endpoint_thread)
    r.start()
    w.start()
    r.join()
    w.join()
    dev.reset()

if __name__ == '__main__':
    main()
    

输出结果

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在Python中使用成员运算符的示例

    在Python中使用成员运算符的示例

    这篇文章主要介绍了在Python中使用成员运算符的示例,是Python学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • python 使用raw socket进行TCP SYN扫描实例

    python 使用raw socket进行TCP SYN扫描实例

    这篇文章主要介绍了python 使用raw socket进行TCP SYN扫描实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python输入正负10进制,转4位16进制问题

    Python输入正负10进制,转4位16进制问题

    这篇文章主要介绍了Python输入正负10进制,转4位16进制问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Python手机与电脑游戏脚本的编写方法

    Python手机与电脑游戏脚本的编写方法

    本文给大家分享一个手机和电脑双平台的游戏脚本,帮助大家赢得游戏,步骤很简单,下面小编给大家分享基于Python游戏脚本的编写方法,感兴趣的朋友一起看看吧
    2021-11-11
  • python获得两个数组交集、并集、差集的方法

    python获得两个数组交集、并集、差集的方法

    这篇文章主要介绍了python获得两个数组交集、并集、差集的方法,实例分析了Python操作list集合的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Python使用selenium模拟键盘输入的常见方法

    Python使用selenium模拟键盘输入的常见方法

    本文主要介绍了在使用Selenium进行模拟登录时,账号和密码输入失败的问题,并提出了几种解决方法,包括使用Selenium的send_keys函数、pyautogui库、pynput库和JavaScript输入操作,并有相关的代码示例供大家参考,需要的朋友可以参考下
    2025-04-04
  • 使用Python脚本操作MongoDB的教程

    使用Python脚本操作MongoDB的教程

    这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面上的教程一般都是讲解JavaScript的脚本操作,本文则是基于Python,需要的朋友可以参考下
    2015-04-04
  • Python3.10动态修改Windows系统本地IP地址

    Python3.10动态修改Windows系统本地IP地址

    这篇文章主要介绍了Python3.10动态修改Windows系统本地IP地址,需要的朋友可以参考下
    2023-05-05
  • python如何生成任意n阶的三对角矩阵

    python如何生成任意n阶的三对角矩阵

    这篇文章主要介绍了python如何生成任意n阶的三对角矩阵,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • 解决Python中的ModuleNotFoundError: No module named 'paddle'错误

    解决Python中的ModuleNotFoundError: No module named 'pad

    你是否在尝试导入`paddle`模块时遇到了"ModuleNotFoundError: No module named 'paddle'"这个错误?别担心,我们的指南会告诉你如何解决,这就像找到丢失的钥匙一样简单,让我们一起来看看如何解决这个问题吧!
    2024-03-03

最新评论