当前位置: 首页 > news >正文

STM32 USB HID 源码方案

STM32 USB HID 源码方案,以 STM32F407 + CubeMX + HAL + USB HID(Custom HID) 为标准示例,适合做 自定义 HID 设备(非键盘/鼠标),比如:
上下位机通信
数据采集合
替代串口


一、推荐方案

STM32 CubeMX + USB Custom HID + HAL

  • MCU:STM32F407
  • USB:Full Speed Device
  • HID:Custom HID(Vendor Defined)
  • 传输方式:Interrupt IN / OUT
  • 包大小:64 Bytes(FS)

二、CubeMX 关键配置

1 USB_OTG_FS

参数 设置
Mode Device_Only
Speed Full Speed (12 MHz)
VBUS Sensing ❌ 关闭
SOF

2 Middleware → USB_DEVICE

参数 设置
Class Custom Human Interface Device Class (HID)
HID Report Descriptor Custom
Endpoint IN 0x81
Endpoint OUT 0x01
Packet Size 64
Polling Interval 1 ms

三、HID 描述符

文件路径:

USB_DEVICE/App/usbd_desc.c

自定义 HID 报告描述符(64 字节双向)

__ALIGN_BEGIN static uint8_t HID_ReportDesc[] __ALIGN_END =
{0x06, 0x00, 0xFF,   // Usage Page (Vendor Defined)0x09, 0x01,         // Usage (Vendor Usage 1)0xA1, 0x01,         // Collection (Application)// Input Report (Device → PC)0x09, 0x02,         // Usage0x15, 0x00,         // Logical Min (0)0x26, 0xFF, 0x00,   // Logical Max (255)0x75, 0x08,         // Report Size (8 bits)0x95, 0x40,         // Report Count (64 bytes)0x81, 0x02,         // Input (Data,Var,Abs)// Output Report (PC → Device)0x09, 0x03,         // Usage0x15, 0x00,0x26, 0xFF, 0x00,0x75, 0x08,0x95, 0x40,0x91, 0x02,         // Output (Data,Var,Abs)0xC0                // End Collection
};

作用

  • PC ↔ STM32 每次最多 64 字节
  • 不走键盘/鼠标协议,免驱

四、USB HID 收发源码

1 发送数据(STM32 → PC)

文件:usbd_custom_hid_if.c

#include "usbd_customhid.h"extern USBD_HandleTypeDef hUsbDeviceFS;void USB_HID_Send(uint8_t *data, uint16_t len)
{if (len > 64) len = 64;USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, data, len);
}

使用示例:

uint8_t tx_buf[64] = {0xAA, 0x55};
USB_HID_Send(tx_buf, 64);

2 接收数据(PC → STM32)

USBD_CUSTOM_HID_DataOut() 回调中接收:

extern USBD_HandleTypeDef hUsbDeviceFS;static int8_t USBD_CUSTOM_HID_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum)
{uint8_t *rx_buf = ((USBD_CUSTOM_HID_HandleTypeDef *)(pdev->pClassData))->Report_buf;// rx_buf[0] ~ rx_buf[63]// 在这里处理 PC 下发的数据// 重新开启 OUT 端点USBD_LL_PrepareReceive(pdev, CUSTOM_HID_EPOUT_ADDR,((USBD_CUSTOM_HID_HandleTypeDef *)(pdev->pClassData))->Report_buf,CUSTOM_HID_EPOUT_SIZE);return USBD_OK;
}

五、main.c 初始化

int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USB_DEVICE_Init();uint8_t hid_tx[64] = {0x01,0x02,0x03};while (1){USB_HID_Send(hid_tx, 64);HAL_Delay(1000);}
}

参考代码 stm32 usb hid全套程序源代码 www.youwenfan.com/contentcnt/182668.html

六、PC 端测试工具

工具 用途
HIDAPI PC 上位机(C/C++/Python)
Bus Hound USB 抓包
USBlyzer 描述符分析
PyUSB / hidapitester Python 通信

Python 示例(HIDAPI)

import hiddev = hid.device()
dev.open(0x0483, 0x5750)dev.write([0x00] + [i for i in range(64)])
print(dev.read(64))

七、常见 PID / VID(STM32 默认)

项目
VID 0x0483
PID 0x5750
Manufacturer STMicroelectronics

可在 usbd_desc.c 中修改。


八、常见问题速查

问题 解决
电脑不识别 检查 USB DP 上拉、时钟 48MHz
只能发一次 OUT 端点未重新 PrepareReceive
枚举失败 描述符 Report Count 错
Windows 不认 不要用键盘 Usage Page

http://www.jsqmd.com/news/670564/

相关文章:

  • 2026年零食品牌灯箱哪家强?专业厂商实力测评 - 资讯焦点
  • 别再只会用Canny了!Python+OpenCV实战对比:Sobel、Prewitt、Laplacian哪个更适合你的项目?
  • 2026年产品三维动画公司推荐:工业机械/环保设备/生产线三维动画制作服务商精选 - 品牌推荐官
  • 音频标注新革命:免费开源的Audio Annotator完整指南
  • Xenos终极指南:Windows DLL注入的完整解决方案
  • 告别轮询:在Android APP里用更优雅的方式接收STM32(ESP8266)发来的数据
  • 5分钟掌握FF14动画跳过插件:告别冗长副本动画的终极指南
  • imkey钱包中国区官网,imkey好用吗 - 资讯焦点
  • Phi-4-mini-reasoning入门必看:推理模型评估指标——正确率vs.可解释性权衡
  • ContextEngineering上下文工程
  • Tkinter 设计师的使用与常见问题解决
  • Legacy-iOS-Kit终极指南:让旧款iPhone/iPad重获新生
  • 解放双手的智能签到管家:30+平台自动化签到实战指南
  • 分析不错的FRP筋品牌商,告诉你如何选到好用又实惠的产品 - 工业品牌热点
  • 自建网盘!一款开源企业级文件存储管理系统!
  • 2026 医考培训机构权威测评|覆盖医师药师护士备考,优质机构推荐与踩坑提醒 - 速递信息
  • 别再只用get了!TreeMap的floorKey和ceilingKey才是处理范围查询的神器(附LeetCode实战)
  • Hitboxer:开源键盘输入冲突处理与映射优化工具 - 内核级低延迟仲裁解决方案
  • Spring Boot 3.x + Spring Security 6 实战:手把手教你配置CAS客户端实现单点登录(附完整代码)
  • 免费分屏神器:Nucleus Co-Op如何让单人游戏变身多人派对
  • 野火指南者STM32F103VET6上,用FreeModbus v1.6实现Modbus RTU从站,这5个文件是关键
  • 关于文本输出内容的对齐问题
  • 守稳数字化核心,赋能长效运营——无锡哲讯的SAP智慧运维之道
  • 避坑指南:LangChain RAG项目中Chroma向量数据库的5个常见配置错误
  • 保姆级教程:在CentOS 8上为ESP32-S3编译带OV2640摄像头驱动的MicroPython固件
  • AGI信任危机破局之道:3层去中心化共识机制设计与实测性能对比(含TPS 47.8K数据)
  • 治学家 方达炬:武昌,公器致富的摇篮。
  • Amlogic S9XXX Armbian内核编译全攻略:从新手到高手的进阶之路
  • 告别网盘龟速下载:这款浏览器脚本让你轻松获取真实下载地址
  • 3步轻松实现Android Studio中文界面配置