你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)

[复制链接]
德华 发布时间:2014-3-31 11:33
设计目的:实现一个可以控制的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




收藏 评论12 发布时间:2014-3-31 11:33

举报

12个回答
STM32F103-34799 回答时间:2014-3-31 11:48:31

RE:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)

在windows下,这个需要做驱动么?windows里面有MSC和HDI类的驱动,不装驱动试过没?
德华 回答时间:2014-3-31 12:57:20

回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)

回复第 2 楼 于2014-03-31 11:48:31发表:
在windows下,这个需要做驱动么?windows里面有MSC和HDI类的驱动,不装驱动试过没?
我说了 用NI VISA  再用labview 操作  如果会C++的可以自己写一个
 
德华 回答时间:2014-3-31 12:59:46

RE:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)

电脑可以识别成两个设备 但是你要在HID里实现自己的控制命令 就要知道端口啊
STM32F103-34799 回答时间:2014-3-31 20:00:54

RE:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)

但是,你要实现的是什么功能呢?能够识别就说明驱动已经识别成功了。你再做的应该是app,而不是driver了吧?不过用labview可能要装它自己另外做的驱动,而不用windows的通用驱动了。关键还是不知道你要实现啥功能,开始我以为是一个既当鼠标又当优盘的实现
德华 回答时间:2014-4-1 22:36:29

回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)

回复第 5 楼 于2014-03-31 20:00:54发表:
但是,你要实现的是什么功能呢?能够识别就说明驱动已经识别成功了。你再做的应该是app,而不是driver了吧?不过用labview可能要装它自己另外做的驱动,而不用windows的通用驱动了。关键还是不知道你要实现啥功能,开始我以为是一个既当鼠标又当优盘的实现 

我在里面配置时间  配置校准参数 配置采样率 配置等等 做成数据记录仪
froxy-349483 回答时间:2014-4-5 23:09:05

回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)

你好,楼主,你的usb存储设备的程序是什么写的,可以参考一下吗
德华 回答时间:2014-4-6 01:24:34

回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)

回复第 7 楼 于2014-04-05 23:09:05发表:
你好,楼主,你的usb存储设备的程序是什么写的,可以参考一下吗
 

keil  项目应用 不好意思
德华 回答时间:2014-4-8 09:05:05

回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)

回复第 7 楼 于2014-04-05 23:09:05发表:
你好,楼主,你的usb存储设备的程序是什么写的,可以参考一下吗
就这块描述符比较重要 剩下的没多大改动 在官方驱动上修改
 
lwx309025167 回答时间:2014-8-4 22:10:40

回复:【MCU实战经验】+STM32F407=USB符合设备(HID+MSC)

 楼主你好,小弟刚接触stm32不久。有一个小任务是与sdio读写emmc有关。楼主能分享一些相关的经验吗,多谢!
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版