You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python向STM32发送USB数据?现有串口方案不满足需求

Python通过USB向STM32发送数据的实现方案

首先要明确你的STM32固件是配置为哪种USB设备类,不同类型的USB设备对应不同的Python实现方式,以下是两种最常用的方案:

一、自定义HID设备通信

如果STM32被配置为自定义HID设备,可使用pyhidapi库实现通信:

  • 先安装依赖:pip install pyhidapi
  • 示例代码(需替换为你的设备VID、PID及HID报告格式):
import hid

# 替换为STM32的VID和PID(可通过设备管理器查看)
DEVICE_VID = 0x0483
DEVICE_PID = 0x5750

try:
    # 打开HID设备
    hid_device = hid.Device(vid=DEVICE_VID, pid=DEVICE_PID)
    # 构造HID报告数据(首字节为报告ID,若STM32未使用报告ID则设为0)
    send_data = [0x00] + list(b"your_data_here")
    # 发送数据
    hid_device.write(send_data)
    # 可选:读取板卡响应
    response = hid_device.read(64, timeout=1500)
    print(f"收到响应: {bytes(response)}")
    hid_device.close()
except Exception as e:
    print(f"HID通信失败: {str(e)}")

二、批量传输类USB设备通信

如果STM32配置为自定义USB设备(使用Bulk端点),可借助libusb1库实现:

  • 安装依赖:pip install libusb1
  • 示例代码(需替换VID、PID及端点地址):
from usb1 import USBContext, USBError

# 替换为你的设备参数
DEVICE_VID = 0x0483
DEVICE_PID = 0x5750
OUT_ENDPOINT = 0x01  # 输出端点地址(STM32固件中定义)
IN_ENDPOINT = 0x81   # 输入端点地址(STM32固件中定义)

with USBContext() as ctx:
    device_handle = ctx.openByVendorIDAndProductID(DEVICE_VID, DEVICE_PID)
    if not device_handle:
        print("未找到目标USB设备")
        exit()
    try:
        # 发送数据
        device_handle.bulkWrite(OUT_ENDPOINT, b"your_data_here", timeout=1000)
        # 读取响应
        response_data = device_handle.bulkRead(IN_ENDPOINT, 64, timeout=1000)
        print(f"收到响应: {bytes(response_data)}")
    except USBError as e:
        print(f"USB通信错误: {str(e)}")

关键注意事项

  • 必须匹配STM32固件中的VID/PID以及端点配置(HID报告ID、Bulk端点地址),否则无法正常通信。
  • Windows系统下可能需要为STM32安装WinUSB驱动(可通过Zadig工具替换驱动),确保Python库能识别设备。
  • 确认STM32固件已实现对应USB类的处理逻辑,比如HID报告解析、Bulk端点的数据收发回调。

内容的提问来源于stack exchange,提问作者arost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 01:07:36