STM32 USB HID 自定义设备 bulk 传输

本文介绍如何在STM32F4 Discovery板上实现USB HID自定义设备的bulk传输,通过修改USB库的配置文件和描述符,添加bulk传输端点,并在Linux上使用libusb进行读写操作。

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

STM32 USB HID 自定义设备 bulk 传输


ST(意法半导体公司)为STM32系列处理器编写了外设USB的库,并提供了很好的参考例程,本文就是参考ST提供的例程,在STM32F4 discovery板子上实现usb bulk传输。Host端是在linux平台上利用libusb库函数写的读写USB应用。

本次实现在STM32 USB例程中的Device HID 鼠标例程基础上添加bulk传输端点修改而来。

usb_conf.h 文件中添加 bulk传输端点

/*
*   endpoint 0x80 and 0x00 are used for enumerating device.
*   endpoint 0x81 and 0x80 are used for control xfer.
*/
#define HID_IN_EP                    0x81
#define HID_OUT_EP                   0x01
#define HID_IN_PACKET                4
#define HID_OUT_PACKET               4

// add bulk xfer endpoint
#define HID_IN_BULK_EP               0x82 // endpoint in 
#define HID_OUT_BULK_EP              0x02 // endpoint out
// define endpoint max packet size
#define HID_IN_BULK_PACKET           64 
#define HID_OUT_BULK_PACKET          64

usb_desc.c 中修改设备描述符

把bDeviceClass值改为0xFF,表示用户自定义设备;修改VID 和 PID,例如以下程序中的值。

__ALIGN_BEGIN uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] __ALIGN_END =
  {
    // the size of device descriptor
    0x12,                       /*bLength */

    // descriptor type. device descripor type is 0x01
    USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/

    // we use usb2.0
    0x00,                       /*bcdUSB */
    0x02,

    // user defined device
    0xff,                       /*bDeviceClass*/ 
    0x00,                       /*bDeviceSubClass*/

    0x00,                       /*bDeviceProtocol*/

    // endpoint 0 max packet size
    USB_OTG_MAX_EP0_SIZE,      /*bMaxPacketSize*/

    // vendor ID
    LOBYTE(USBD_VID),           
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值