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

st-img
chrome
st-img
firefox
st-img
safari
st-img
ie8及以上
shequ.stmicroelectronics.cn
  • ST意法半导体官网
  • STM32中文官网
  • ST全球论坛
登录/注册
  • 首页
  • 技术问答
  • 话题
  • 资源
  • 创客秀
  • 视频
  • 标签
  • 积分商城
  • 每日签到
fuyu1212

fuyu1212

 

回答数 0 关注数 0
关注 私信
  • 动态99
  • 提问
  • 回答0
  • 创客秀 0
  • 分享 0
  • 关注0
2 回答

STM32L151 HID 64字节双向通信USB驱动

STM32L1 USB
fuyu1212 fuyu1212 回答时间: 2019-5-9 09:46

xsx-365107 发表于 2019-5-9 08:53 有f4的不知道能不能用,hid免驱,不止64字节,我通信的数据大点,会发生几个64 ... 能不能把整个代码发给我试一下。谢谢!

赞0
8 回答

关于苹果笔记本WIN10下面USB连接出错的问题

USB
fuyu1212 fuyu1212 回答时间: 2019-5-8 16:32

本帖最后由 fuyu1212 于 2019-5-8 16:35 编辑 maxtch 发表于 2019-5-7 19:36 USB HID 是跨平台通用的,不过苹果的 BIOS 的确对于 USB 描述符的规范度要求非常高,因此说软件里面少许 ... 下面是设备描述符代码,能帮忙看下什么问题。谢谢!现在是有时可以正常连接。但连接不上的次数占大多数。 /******************** (C) COPYRIGHT 2010 STMicroelectronics ******************** * File Name          : usb_desc.c * Author             : MCD Application Team * Version            : V3.2.1 * Date               : 07/05/2010 * Description        : Descriptors for Joystick Mouse Demo ******************************************************************************** * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. *******************************************************************************/ /* Includes ------------------------------------------------------------------*/ #include "usb_lib.h" /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ /* Extern variables ----------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ /* USB Standard Device Descriptor */ //usb标准设备描述符 const u8 DinkUsbDeviceDescriptor[DINK_USB_SIZ_DEVICE_DESC] = {         USB_DEVICE_DESC_SIZE,                     //bLength字段。设备描述符的长度为18(0x12)字节         USB_DEVICE_DESCRIPTOR_TYPE,                //bDescriptorType字段。设备描述符的编号为0x01         WBVAL(0x0200),                                                //bcdUSB字段。这里设置版本为USB1.1,即0x0110。         0x00,                                     //bDeviceClass字段。我们不在设备描述符中定义设备类,         0x00,                                      //bDeviceSubClass字段。bDeviceClass字段为0时,该字段也为0。         0x00,                                    //bDeviceProtocol字段。bDeviceClass字段为0时,该字段也为0。         0x40,                                                 //bMaxPacketSize0字段。端点0的最大包长度。         WBVAL(0x0483),                            //idVender字段。厂商ID号,我们这里取0x8888,仅供实验用。         WBVAL(0x5750),                            //idProduct字段。产品ID号,由于是第一个实验,我们这里取0x0001。\。         WBVAL(0x0100),                                           // 设备的版本         0x01,                                     //iManufacturer字段。厂商字符串的索引值,为了方便记忆和管理         0x02,                                     //iProduct字段。产品字符串的索引值。刚刚用了1,这里就取2吧。         0x03,                                    //iSerialNumber字段。设备的序列号字符串索引值。         0x01                                      //bNumConfigurations字段。该设备所具有的配置数。 }; //USB报告描述符的定义 const u8 HID_ReportDescriptor[]= {         0x05, 0x8c, /* USAGE_PAGE用法页 (ST Page) */         0x09, 0x01, /* USAGE 用法(Demo Kit) */         0xa1, 0x01, /* COLLECTION 集合开始(Application) */                  // The Input report 输入报告         0x09,0x03, // USAGE ID 用法- Vendor defined         0x15,0x00, // LOGICAL_MINIMUM 逻辑最小值(0)         0x26,0x00, 0xFF, // LOGICAL_MAXIMUM 逻辑最大值(255)         0x75,0x08, // REPORT_SIZE 报告长度(8bit)         0x95,REPORT_COUNT,  // REPORT_COUNT 报告总计(64Byte)         0x81,0x02, // INPUT 输入(Data,Var,Abs)         // The Output report         0x09,0x04, // USAGE ID 用法- Vendor defined         0x15,0x00, // LOGICAL_MINIMUM 逻辑最小值(0)         0x26,0x00,0xFF, // LOGICAL_MAXIMUM 逻辑最大值(255)         0x75,0x08, // REPORT_SIZE 报告长度(8bit)         0x95,REPORT_COUNT,  // REPORT_COUNT 报告总计(64Byte)         0x91,0x02, // OUTPUT输出(Data,Var,Abs)         0xc0 /* END_COLLECTION 集合结束*/ }; //通过上面的报告描述符的定义,我们知道返回的输入报告具有8字节。 //输出报告也有32字节。至于这32字节的数据是干什么用的,就要由用户 //自己来决定了。 ///////////////////////////报告描述符完毕//////////////////////////// /* USB Configuration Descriptor */ /* All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */ //usb配置描述符 const u8 DinkUsbConfigDescriptor[DINK_USB_SIZ_CONFIG_DESC] = {         /***************配置描述符***********************/         USB_CONFIGUARTION_DESC_SIZE,       //bLength字段。配置描述符的长度为9字节。         USB_CONFIGURATION_DESCRIPTOR_TYPE, //bDescriptorType字段。配置描述符编号为0x02。         //wTotalLength字段。配置描述符集合的总长度,         //包括配置描述符本身、接口描述符、类描述符、端点描述符等。         WBVAL(           USB_CONFIGUARTION_DESC_SIZE +                        //配置描述符         USB_INTERFACE_DESC_SIZE     +                        //接口1描述符         9                                                        +                        //hid描述符         USB_ENDPOINT_DESC_SIZE                +                        //端点描述符1         USB_ENDPOINT_DESC_SIZE                +                        //端点描述符2         USB_INTERFACE_DESC_SIZE                +                        //接口2描述符         USB_ENDPOINT_DESC_SIZE                +                        //端点描述符1         USB_ENDPOINT_DESC_SIZE                                        //端点描述符2         ),         0x02,                                              //bNumInterfaces字段。该配置包含的接口数,复合设备,两个接口。         0x01,                                              //bConfiguration字段。该配置的值为1。         0x00,                                             //iConfigurationz字段,该配置的字符串索引。这里没有,为0。         USB_CONFIG_BUS_POWERED ,                                //bmAttributes字段,该设备的属性         USB_CONFIG_POWER_MA(500),                          //bMaxPower字段,该设备需要的最大电流量         /*********************第一个接口描述符,hid设备**********************/         USB_INTERFACE_DESC_SIZE,                         //bLength字段。接口描述符的长度为9字节。         USB_INTERFACE_DESCRIPTOR_TYPE,                    //bDescriptorType字段。接口描述符的编号为0x04。         0x00,                                             //bInterfaceNumber字段。该接口的编号,第一个接口,编号为0。         0x00,                                            //bAlternateSetting字段。该接口的备用编号,为0。         0x02,                                                                        //bNumEndpoints字段。非0端点的数目。该接口有2个批量端点         USB_DEVICE_CLASS_HUMAN_INTERFACE,                 //bInterfaceClass字段。该接口所使用的类。大容量存储设备接口类的代码为0x08。,                  0x00,                                                                        //bInterfaceSubClass字段。该接口所使用的子类。在HID1.1协议中,                                                                                         //只规定了一种子类:支持BIOS引导启动的子类。                                                                                         //USB键盘、鼠标属于该子类,子类代码为0x01。                                                                                         //但这里我们是自定义的HID设备,所以不使用子类。                  0x00,                                                                        //bInterfaceProtocol字段。如果子类为支持引导启动的子类,                                                                                         //则协议可选择鼠标和键盘。键盘代码为0x01,鼠标代码为0x02。                                                                                         //自定义的HID设备,也不使用协议。         0x00,                                                                        //iConfiguration字段。该接口的字符串索引值。这里没有,为0。         /*********************HID报告描述符*************************/         //bLength字段。本HID描述符下只有一个下级描述符。所以长度为9字节。          0x09,                    //bDescriptorType字段。HID描述符的编号为0x21。          0x21,                    //bcdHID字段。本协议使用的HID1.1协议。注意低字节在先。          0x10,          0x01,                    //bCountyCode字段。设备适用的国家代码,这里选择为美国,代码0x21。          0x00,                    //bNumDescriptors字段。下级描述符的数目。我们只有一个报告描述符。          0x01,                    //bDescriptorType字段。下级描述符的类型,为报告描述符,编号为0x22。          0x22,                    //bDescriptorLength字段。下级描述符的长度。下级描述符为报告描述符。          sizeof(HID_ReportDescriptor)&0xFF,          (sizeof(HID_ReportDescriptor)>>8)&0xFF,         /*********************端点1描述符  **********************************/         /* 端点描述符 */         USB_ENDPOINT_DESC_SIZE,                           //bLength字段。端点描述符长度为7字节。         USB_ENDPOINT_DESCRIPTOR_TYPE,                     //bDescriptorType字段。端点描述符编号为0x05。         USB_ENDPOINT_IN(1),                              //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。         USB_ENDPOINT_TYPE_INTERRUPT,                      //bmAttributes字段。D1~D0为端点传输类型选择。         WBVAL(0x0040),                                     //wMaxPacketSize字段。该端点的最大包长。最大包长为64字节。         0x02,                                                                 //bInterval字段。端点查询的时间,端点查询的时间,此处无意义。         /*********************端点2描述符  **********************************/         /* 端点描述符 */         USB_ENDPOINT_DESC_SIZE,                           //bLength字段。端点描述符长度为7字节。         USB_ENDPOINT_DESCRIPTOR_TYPE,                     //bDescriptorType字段。端点描述符编号为0x05。         USB_ENDPOINT_OUT(1),                              //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。         USB_ENDPOINT_TYPE_INTERRUPT,                      //bmAttributes字段。D1~D0为端点传输类型选择。         WBVAL(0x0040),                                     //wMaxPacketSize字段。该端点的最大包长。最大包长为64字节。         0x02,                                                                 //bInterval字段。端点查询的时间,端点查询的时间,此处无意义。         /*******************第二个接口描述符 存储设备*********************/         USB_INTERFACE_DESC_SIZE,                         //bLength字段。接口描述符的长度为9字节。         USB_INTERFACE_DESCRIPTOR_TYPE,                    //bDescriptorType字段。接口描述符的编号为0x04。         0x01,                                             //bInterfaceNumber字段。该接口的编号,第二个接口,编号为1。         0x00,                                            //bAlternateSetting字段。该接口的备用编号,为0。         0x02,                                                                        //bNumEndpoints字段。非0端点的数目。该接口有2个批量端点         USB_DEVICE_CLASS_STORAGE,                                 //bInterfaceClass字段。该接口所使用的类。大容量存储设备接口类的代码为0x08。,         MSC_SUBCLASS_SCSI,                                 //bInterfaceSubClass字段。SCSI透明命令集的子类代码为0x06。         MSC_PROTOCOL_BULK_ONLY,                 //bInterfaceProtocol字段。协议为仅批量传输,代码为0x50。         0x04,                                            //iConfiguration字段。该接口的字符串索引值         /************************************* 端点描述符 1*********************************************/         USB_ENDPOINT_DESC_SIZE,                           //bLength字段。端点描述符长度为7字节。         USB_ENDPOINT_DESCRIPTOR_TYPE,                     //bDescriptorType字段。端点描述符编号为0x05。         USB_ENDPOINT_IN(2),                              //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。         USB_ENDPOINT_TYPE_BULK,                              //bmAttributes字段。D1~D0为端点传输类型选择。         WBVAL(0x0040),                                     //wMaxPacketSize字段。该端点的最大包长。最大包长为64字节。         0x00,                                                                 //bInterval字段。端点查询的时间,端点查询的时间,此处无意义。                  /************************************端点描述符 2********************************************************/         USB_ENDPOINT_DESC_SIZE,                           //bLength字段。端点描述符长度为7字节。         USB_ENDPOINT_DESCRIPTOR_TYPE,                     //bDescriptorType字段。端点描述符编号为0x05。         USB_ENDPOINT_OUT(2),                              //bEndpointAddress字段。端点的地址。我们使用D12的输入端点1。         USB_ENDPOINT_TYPE_BULK,                              //bmAttributes字段。D1~D0为端点传输类型选择。         WBVAL(0x0040),                                     //wMaxPacketSize字段。该端点的最大包长。最大包长为64字节。         0x00,                                                                 //bInterval字段。端点查询的时间,端点查询的时间,此处无意义。 }; /************************语言ID的定义********************/ const u8 DinkUsbLanguageId[DINK_USB_SIZ_STRING_LANGID]= {     0x04, //本描述符的长度     0x03, //字符串描述符     //0x0409为美式英语的ID     0x09,     0x04 }; ////////////////////////语言ID完毕////////////////////////////////// //Unicode 字符串描述符 //邓小俊的usb鼠标 const u8 DinkUsbManufacturerStringDescriptor[DINK_USB_SIZ_STRING_VENDOR]= {     32,         //该描述符的长度为32字节         0x03,       //字符串描述符的类型编码为0x03         0x44, 0x00, //D         0x49, 0x00, //I         0x4e, 0x00, //N         0x4b, 0x00, //K         0x5f, 0x00, //_         0x48, 0x00, //H         0x49, 0x00, //I         0x44, 0x00, //D         0x5f, 0x00, //_         0x44, 0x00, //D         0x45, 0x00, //E         0x56, 0x00, //V         0x49, 0x00, //I         0x43, 0x00, //C         0x45, 0x00  //E }; /////////////////////////厂商字符串结束///////////////////////////// //产品字符串描述符 const u8 DinkUsbProductStringDescriptor[DINK_USB_SIZ_STRING_PRODUCT]= {     32,         //该描述符的长度为32字节         0x03,       //字符串描述符的类型编码为0x03         0x44, 0x00, //0x5A, 0x00, //D(0x44)==>Z         0x49, 0x00, //0x4D, 0x00, //I(0x49)==>M         0x4E, 0x00, //0x5A, 0x00, //N(0x4E)==>Z         0x4B, 0x00, //0x38, 0x00, //K(0x4B)==>8         0x5f, 0x00, //_         0x48, 0x00, //H         0x49, 0x00, //I         0x44, 0x00, //D         0x5f, 0x00, //_         0x44, 0x00, //D         0x45, 0x00, //E         0x56, 0x00, //V         0x49, 0x00, //I         0x43, 0x00, //C         0x45, 0x00  //E }; ////////////////////////产品字符串结束//////////////////////////// //字符串“2008-07-07”的Unicode编码 //8位小端格式 const u8 DinkUsbSerialNumberStringDescriptor[DINK_USB_SIZ_STRING_SERIAL]={     22,         //该描述符的长度为22字节         0x03,       //字符串描述符的类型编码为0x03         0x32, 0x00, //2         0x30, 0x00, //0         0x31, 0x00, //1         0x35, 0x00, //5         0x2d, 0x00, //-         0x30, 0x00, //0         0x33, 0x00, //3         0x2d, 0x00, //-         0x32, 0x00, //2         0x31, 0x00  //1 }; //////////////////////产品序列号字符串结束///////////////////////// //产品序列号 u8 DinkUsbStringSerialUniqueId[DINK_USB_SIZ_STRING_SERIAL_UNIQUE_ID] = {     DINK_USB_SIZ_STRING_SERIAL_UNIQUE_ID,        //描述符长度     0x03                                                      //描述符类型编码     /* Serial number该编码将会在程序运行的时候用芯片唯一unique id进行填充*/ }; /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/

赞0
fuyu1212 fuyu1212


阅读作者更多的帖子

所在话题

参与活动

  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    网络 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16
  • 滴滴押注社区团购,明确“投入不设上限,要做市场第一”

    线下 2020-10-16