|
设计目的:实现一个可以控制的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 =. s, V i1 b4 P3 G8 y* ^$ c {: Z$ H; Q1 b+ o& l0 r# D7 n ( S5 [; k g. |0 L+ R, C& \ 0x09, /* bLength: Configuation Descriptor size */- \( Z! C: k8 m, r' p2 k USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */ USB_MSC_CONFIG_DESC_SIZ, 0x00, 0x02, /* bNumInterfaces: 1 interface 既然是复合设备就应该有两个端口*/ 0x01, /* bConfigurationValue: */ 0x04, /* iConfiguration: */+ @6 i0 n; k. F+ _* s8 A, d2 C 0xC0, /* bmAttributes: */ 0x64, /* MaxPower 100 mA */, }) D d; C: S) [6 l3 h /************** Descriptor of Joystick Mouse interface ****************/ /* 09 */( N0 Z) Z; [$ { M$ Y 0x09, /*bLength: Interface Descriptor size*/4 B3 Z* Q- [& i6 P" H) k, v- d USB_INTERFACE_DESCRIPTOR_TYPE,/*bDescriptorType: Interface descriptor type*/" I% A, o" v* N4 X 0x00, /*bInterfaceNumber: Number of Interface*/ 0x00, /*bAlternateSetting: Alternate setting*/0 a( x+ L- d! d* {- R 0x02, /*bNumEndpoints*/ 0x03, /*bInterfaceClass: HID*/8 i# `1 G! p: S9 Y0 b 0x00, /*bInterfaceSubClass : 1=BOOT, 0=no boot*/6 m4 N5 E' [/ y. b! r! n6 ^ 0x00, /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/4 @# T! l; m( R8 ?# Y5 ]0 v 0, /*iInterface: Index of string descriptor*/ /******************** Descriptor of Joystick Mouse HID ********************/# w0 C/ B$ i u /* 18 */ 0x09, /*bLength: HID Descriptor size*/" A4 u" u0 F/ g3 Q3 @# t f& L HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID*/ 0x11, /*bcdHID: HID Class Spec release number*/ 0x01,5 t8 y. S4 r7 o1 `! S' B 0x00, /*bCountryCode: Hardware target country*/% C# }; L! P, P 0x01, /*bNumDescriptors: Number of HID class descriptors to follow*/" n& S# |( }& `" j 0x22, /*bDescriptorType*/ 33,/*wItemLength: Total length of Report descriptor*/" s- [4 H; G5 F3 g! r2 F 0x00, /******************** Descriptor of Mouse endpoint ********************/: V1 `2 ]( B3 K- C3 j /* 27 */5 O* d( f" W/ l& m 0x07, /*bLength: Endpoint Descriptor size*/8 [! O1 m% V& n USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*// x9 n+ l9 ~( r0 r& | $ E7 i' e$ a( l6 ^ HID_IN_EP, /*bEndpointAddress: Endpoint Address (IN)*/ 0x02, /*bmAttributes: Interrupt endpoint*/3 Q1 ^. R5 g* F0 u! [ HID_IN_PACKET, /*wMaxPacketSize: 64 Byte max */3 k& X% |( ]( g3 O3 l+ ^" l9 q( o 0x00, 0x0A, /*bInterval: Polling Interval (10 ms)*/ /* 34 */ 0x07, /*bLength: Endpoint Descriptor size*/% k j Y, {$ B" V- w8 l USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType:*/% l n* B9 L6 W! j( X1 r HID_OUT_EP, /*bEndpointAddress: Endpoint Address (IN)*/! {5 U0 F* Z7 t3 o 0x02, /*bmAttributes: Interrupt endpoint*/ HID_IN_PACKET, /*wMaxPacketSize: 64 Byte max */% @ D4 C5 R u+ K2 ?8 b- { 0x00, 0x0A, /*bInterval: Polling Interval (10 ms)*/ /*41*/ /******************** Mass Storage interface ********************/# ~6 O) G7 _6 i3 e0 Z7 i8 r 0x09, /* bLength: Interface Descriptor size */ 0x04, /* bDescriptorType: */ 0x01, /* bInterfaceNumber: Number of Interface */ ^5 a. y+ s6 v, U/ @, @! E 0x00, /* bAlternateSetting: Alternate setting */( P) M" j) n# A/ f U3 [0 b. D 0x02, /* bNumEndpoints*/ 0x08, /* bInterfaceClass: MSC Class */ 0x06, /* bInterfaceSubClass : SCSI transparent*/ 0x50, /* nInterfaceProtocol */ 0x05, /* iInterface: */ /******************** Mass Storage Endpoints ********************/- V7 I/ x g4 Q3 i. v" X 0x07, /*Endpoint descriptor length = 7*/ 0x05, /*Endpoint descriptor type */ MSC_IN_EP, /*Endpoint address (IN, address 1) */# B( l: j1 m7 p) V( | 0x02, /*Bulk endpoint type */$ d+ ^) y. _( N: h4 o- `1 U LOBYTE(MSC_MAX_PACKET), HIBYTE(MSC_MAX_PACKET),2 `& R' \+ x* l5 @5 j/ ` 0x00, /*Polling interval in milliseconds */" `7 w6 m2 R) x0 C% S ?+ v. l 0x07, /*Endpoint descriptor length = 7 */ 0x05, /*Endpoint descriptor type */ MSC_OUT_EP, /*Endpoint address (OUT, address 1) */1 T! X' }. I9 x' k# [ 0x02, /*Bulk endpoint type */1 Z8 |; x0 A7 {! n+ a. k LOBYTE(MSC_MAX_PACKET), HIBYTE(MSC_MAX_PACKET), 0x00, /*Polling interval in milliseconds*/ }; 5 E; b; b! m- {" t; U+ r4 T8 v 在usb_conf.h里 #define USBD_CFG_MAX_NUM 1 #define USBD_ITF_MAX_NUM 1$ m$ Y! B! e: }) N/ R/ A& a #define USB_MAX_STR_DESC_SIZ 64 & p& N, o; t+ z) h9 t2 p) J- p 3 U$ r0 D- R8 O0 P #define USBD_SELF_POWERED 7 E( H/ u9 p8 u ~$ l( v5 c /* Class Layer Parameter */ ' U* t4 z# U' X. o #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 #else0 X) W, N, x c #define MSC_MAX_PACKET 64: J6 t( V$ ^0 t9 K/ ~7 m( b9 \ #endif #else /*USE_USB_OTG_FS*/ #define MSC_MAX_PACKET 64 L: i7 ]7 Z3 z/ Z7 ? S #endif! L8 ~, J0 F H/ B8 w2 T r, \ 6 u- |/ B e4 O #define HID_IN_EP 0x81 用于控制+ U" M5 K' a* P, ^ #define HID_OUT_EP 0x01 用于控制 * z" r3 r) B8 n! T g #define HID_IN_PACKET 0x40 #define HID_OUT_PACKET 0x40 #define MSC_MEDIA_PACKET 4096 添加相应的端口定义 将HID历程的一些必须函数拼接到MSC里面$ H0 N" ] H* u' _6 {% p( H- W QQ:393441746 欢迎一起交流STM32的知识,我使用过103 407 030 或者直接在帖子里讨论 我常来的" i: Q3 I- f( e; E$ ^ 库函数加快了我的开发+ N0 u5 |& p0 ^4 {& w% | 你还在使用串口吗,像当年玩串口一样使用USB 将是不一样的体验目前自己创业在做PM2.5传感器 http://shop144438126.taobao.com/?spm=a1z10.1-c.0.0.A2q64T: ?4 F2 l6 N$ B- U7 K9 I% E 2 P+ U! y2 z# u/ _+ W7 | 5 [. k6 W9 K& t) D |
【福利三:雨露均沾·逢7狂欢】之四:用一个定时器同步另外两个定时器输出PWM
【逢7发帖赢大礼】STM32开发之WIFI实时时钟
【逢7发帖赢大礼】STM32开发之指纹识别!
【逢7发帖赢大礼】STM32开发之环境空气质量监测
【逢7发帖赢大礼】STM32开发之人体实时运动信息监测!
【逢7发帖赢大礼】STM32开发之IC门禁卡UID读取方法!
【逢7发帖赢大礼】全网最简单的Arduino_STM32开发环境搭建教程!
STM32F4中文用户手册
STM32F400、STM32F402 Cortex-M4超值单片机
最全USB HID开发资料,悉心整理一个月,亲自测试
微信公众号
手机版
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存储设备的程序是什么写的,可以参考一下吗- G+ A' k3 \. [' E& _5 ?) @% q
keil 项目应用 不好意思
回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)
你好,楼主,你的usb存储设备的程序是什么写的,可以参考一下吗7 S# T3 V# b6 r
就这块描述符比较重要 剩下的没多大改动 在官方驱动上修改
回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)