|
设计目的:实现一个可以控制的U盘 USB口选用高速口,MSC选用SD卡(我用的eMMC) 设计思路:选择标准的历程MSC当做基础历程,U盘的功能就实现了,那么怎么做一个HID上去呢,就是修改描述符了,做一个复合设备的描述符,将HID历程的一些必须函数拼接到MSC里面,做好了设备驱动怎么弄呢,我也不会写 ,但是我安装了NI VISA 可以自己生成驱动文件,再用LABVIEW在线编程。 _ALIGN_BEGIN uint8_t USBD_MSC_CfgDesc[USB_MSC_CONFIG_DESC_SIZ] __ALIGN_END = { 0x09, /* bLength: Configuation Descriptor size */ USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */ USB_MSC_CONFIG_DESC_SIZ, 0x00, 0x02, /* bNumInterfaces: 1 interface 既然是复合设备就应该有两个端口*/ 0x01, /* bConfigurationValue: */ 0x04, /* iConfiguration: */ 0xC0, /* bmAttributes: */ 0x64, /* MaxPower 100 mA */ /************** Descriptor of Joystick Mouse interface ****************/ /* 09 */ 0x09, /*bLength: Interface Descriptor size*/ USB_INTERFACE_DESCRIPTOR_TYPE,/*bDescriptorType: Interface descriptor type*/ 0x00, /*bInterfaceNumber: Number of Interface*/ 0x00, /*bAlternateSetting: Alternate setting*/ 0x02, /*bNumEndpoints*/ 0x03, /*bInterfaceClass: HID*/ 0x00, /*bInterfaceSubClass : 1=BOOT, 0=no boot*/ 0x00, /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/ 0, /*iInterface: Index of string descriptor*/ /******************** Descriptor of Joystick Mouse HID ********************/ /* 18 */ 0x09, /*bLength: HID Descriptor size*/ HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/ 0x11, /*bcdHID: HID Class Spec release number*/ 0x01, 0x00, /*bCountryCode: Hardware target country*/ 0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/ 0x22, /*bDescriptorType*/ 33,/*wItemLength: Total length of Report descriptor*/ 0x00, /******************** Descriptor of Mouse endpoint ********************/ /* 27 */ 0x07, /*bLength: Endpoint Descriptor size*/ USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/ HID_IN_EP, /*bEndpointAddress: Endpoint Address (IN)*/ 0x02, /*bmAttributes: Interrupt endpoint*/ HID_IN_PACKET, /*wMaxPacketSize: 64 Byte max */ 0x00, 0x0A, /*bInterval: Polling Interval (10 ms)*/ /* 34 */ 0x07, /*bLength: Endpoint Descriptor size*/ USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/ HID_OUT_EP, /*bEndpointAddress: Endpoint Address (IN)*/ 0x02, /*bmAttributes: Interrupt endpoint*/ HID_IN_PACKET, /*wMaxPacketSize: 64 Byte max */ 0x00, 0x0A, /*bInterval: Polling Interval (10 ms)*/ /*41*/ /******************** Mass Storage interface ********************/ 0x09, /* bLength: Interface Descriptor size */ 0x04, /* bDescriptorType: */ 0x01, /* bInterfaceNumber: Number of Interface */ 0x00, /* bAlternateSetting: Alternate setting */ 0x02, /* bNumEndpoints*/ 0x08, /* bInterfaceClass: MSC Class */ 0x06, /* bInterfaceSubClass : SCSI transparent*/ 0x50, /* nInterfaceProtocol */ 0x05, /* iInterface: */ /******************** Mass Storage Endpoints ********************/ 0x07, /*Endpoint descriptor length = 7*/ 0x05, /*Endpoint descriptor type */ MSC_IN_EP, /*Endpoint address (IN, address 1) */ 0x02, /*Bulk endpoint type */ LOBYTE(MSC_MAX_PACKET), HIBYTE(MSC_MAX_PACKET), 0x00, /*Polling interval in milliseconds */ 0x07, /*Endpoint descriptor length = 7 */ 0x05, /*Endpoint descriptor type */ MSC_OUT_EP, /*Endpoint address (OUT, address 1) */ 0x02, /*Bulk endpoint type */ LOBYTE(MSC_MAX_PACKET), HIBYTE(MSC_MAX_PACKET), 0x00, /*Polling interval in milliseconds*/ }; 在usb_conf.h里 #define USBD_CFG_MAX_NUM 1 #define USBD_ITF_MAX_NUM 1 #define USB_MAX_STR_DESC_SIZ 64 #define USBD_SELF_POWERED /* Class Layer Parameter */ #define MSC_IN_EP 0x82 /// 用于U盘 #define MSC_OUT_EP 0x02 /// 用于U盘 #ifdef USE_USB_OTG_HS #ifdef USE_ULPI_PHY #define MSC_MAX_PACKET 512 #else #define MSC_MAX_PACKET 64 #endif #else /*USE_USB_OTG_FS*/ #define MSC_MAX_PACKET 64 #endif #define HID_IN_EP 0x81 用于控制 #define HID_OUT_EP 0x01 用于控制 #define HID_IN_PACKET 0x40 #define HID_OUT_PACKET 0x40 #define MSC_MEDIA_PACKET 4096 添加相应的端口定义 将HID历程的一些必须函数拼接到MSC里面 QQ:393441746 欢迎一起交流STM32的知识,我使用过103 407 030 或者直接在帖子里讨论 我常来的 库函数加快了我的开发 你还在使用串口吗,像当年玩串口一样使用USB 将是不一样的体验目前自己创业在做PM2.5传感器 http://shop144438126.taobao.com/?spm=a1z10.1-c.0.0.A2q64T |
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版
RE:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)
回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)
在windows下,这个需要做驱动么?
我说了 用NI VISA 再用labview 操作 如果会C++的可以自己写一个
RE:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)
RE:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)
回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)
但是,你要实现的是什么功能呢?能够识别就说明驱动已经识别成功了。你再做的应该是app,而不是driver了吧?不过用labview可能要装它自己另外做的驱动,而不用windows的通用驱动了。关键还是不知道你要实现啥功能,开始我以为是一个既当鼠标又当优盘的实现
我在里面配置时间 配置校准参数 配置采样率 配置等等 做成数据记录仪
回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)
回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)
你好,楼主,你的usb存储设备的程序是什么写的,可以参考一下吗
keil 项目应用 不好意思
回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)
你好,楼主,你的usb存储设备的程序是什么写的,可以参考一下吗
就这块描述符比较重要 剩下的没多大改动 在官方驱动上修改
回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)