9339|9

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

stm32做USB键盘的问题 [复制链接]

用STM32的keil那个开发板试了试HID的DEMO,没用任何问题。
现在想用它实现一个USB的键盘,结果发现DEMO里收发的数据只有1字节,在描述符里把那个ReportSize改成8了,但是只要一发送数据,USB设备就reset了。这是什么原因啊?
此帖出自stm32/stm8论坛

最新回复

                                 你再仔细看看。如果还没到发送数据包就被Reset,多数情况是某个描述符有问题。   详情 回复 发表于 2008-1-19 16:53
点赞 关注
 

回复
举报

65

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

跟着改

                                 在描述符里把那个ReportSize改成8,发送数据也要1次发8个,否则当然PC会发reset了-收不到期望的8字节数据,发生超时
此帖出自stm32/stm8论坛
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

好像还是不行

                                 按照您说的改了那个REPORT SIZE为8,但是还是不能发送数据,程序中原来发送1字节的地方也都改成了发送8字节。是不是还有什么其他的东西需要改啊?我找了个标准的键盘描述符试了下也不行,郁闷了。
此帖出自stm32/stm8论坛
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 

请描述一下你发的是什么数据?

请描述下述操作你发的是什么数据:
1)按下Shift
2)再按下A
3)释放A不释放Shift
4)按下B
5)释放B
6)再释放Shift
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

5
 

我觉得用报告做麻烦,不如用中断端点做...可以参考下圈圈

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

6
 

还没到那呢

                                 我现在就是测试状态,我在程序里设定的是定时发送一个8字节数据,但是一次也发不出来。
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

7
 

键盘的报告是成对的,按键和释放键分别要发送报告

                                 你定时发送一个8字节数据,如果是固定的数值,PC很可能会认为键盘有故障,所以才会Reset你的设备!
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

8
 

那起码应该能看见一个发送的数据吧?

即使认为我有问题也不能根据一个数据包就断定我有问题吧?
现在的问题是一个数据包都发不出来,肯定还什么设置有问题吧?
晕死了已经。
const BYTE USB_DeviceDescriptor[] = {
  USB_DEVICE_DESC_SIZE,              /* bLength */
  USB_DEVICE_DESCRIPTOR_TYPE,        /* bDescriptorType */
  WBVAL(0x0110), /* 1.10 */          /* bcdUSB */
  0x00,                              /* bDeviceClass */
  0x00,                              /* bDeviceSubClass */
  0x00,                              /* bDeviceProtocol */
  USB_MAX_PACKET0,                   /* bMaxPacketSize0 */
  WBVAL(0xC251),                     /* idVendor */
  WBVAL(0x1C01),                     /* idProduct */
  WBVAL(0x0100), /* 1.00 */          /* bcdDevice */
  0x04,                              /* iManufacturer */
  0x20,                              /* iProduct */
  0x44,                              /* iSerialNumber */
  0x01                               /* bNumConfigurations */
};
const BYTE USB_ConfigDescriptor[] = {
/* Configuration 1 */
  USB_CONFIGUARTION_DESC_SIZE,       /* bLength */
  USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType */
  WBVAL(                             /* wTotalLength */
    USB_CONFIGUARTION_DESC_SIZE +
    USB_INTERFACE_DESC_SIZE     +
    HID_DESC_SIZE               +
    USB_ENDPOINT_DESC_SIZE
  ),
  0x01,                              /* bNumInterfaces */
  0x01,                              /* bConfigurationValue */
  0x00,                              /* iConfiguration */
  USB_CONFIG_BUS_POWERED /*|*/       /* bmAttributes */
  USB_CONFIG_POWER_MA(100),          /* bMaxPower */
/* Interface 0, Alternate Setting 0, HID Class */
  USB_INTERFACE_DESC_SIZE,           /* bLength */
  USB_INTERFACE_DESCRIPTOR_TYPE,     /* bDescriptorType */
  0x00,                              /* bInterfaceNumber */
  0x00,                              /* bAlternateSetting */
  0x01,                              /* bNumEndpoints */
  USB_DEVICE_CLASS_HUMAN_INTERFACE,  /* bInterfaceClass */
  HID_SUBCLASS_BOOT,                 /* bInterfaceSubClass */
  HID_PROTOCOL_KEYBOARD,                 /* bInterfaceProtocol */
  0x5E,                              /* iInterface */
/* HID Class Descriptor */
/* HID_DESC_OFFSET = 0x0012 */
  HID_DESC_SIZE,                     /* bLength */
  HID_HID_DESCRIPTOR_TYPE,           /* bDescriptorType */
  WBVAL(0x0110), /* 1.00 */          /* bcdHID */
  0x00,                              /* bCountryCode */
  0x01,                              /* bNumDescriptors */
  HID_REPORT_DESCRIPTOR_TYPE,        /* bDescriptorType */
  WBVAL(HID_REPORT_DESC_SIZE),       /* wDescriptorLength */
/* Endpoint, HID Interrupt In */
  USB_ENDPOINT_DESC_SIZE,            /* bLength */
  USB_ENDPOINT_DESCRIPTOR_TYPE,      /* bDescriptorType */
  USB_ENDPOINT_IN(1),                /* bEndpointAddress */
  USB_ENDPOINT_TYPE_INTERRUPT,       /* bmAttributes */
  WBVAL(0x0010),                     /* wMaxPacketSize */
  0x10          /* 16ms */          /* bInterval */
};
const BYTE HID_ReportDescriptor[] = {
  HID_UsagePage(0x01),
  HID_Usage(0x06),
  HID_Collection(HID_Application),
    HID_UsagePage(HID_USAGE_PAGE_KEYBOARD),
    HID_UsageMin(0),
    HID_UsageMax(101),
    HID_LogicalMin(0),
    HID_LogicalMax(255),
    HID_ReportCount(8),
    HID_ReportSize(8),
    HID_Input(HID_Data | HID_Variable | HID_Absolute),
  HID_EndCollection,
};
各位大侠帮我看看这些描述符是不是有什么问题?
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

9
 

没有大侠出手啊!

                                 如题,郁闷,55
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

10
 

3楼抓到的ConfigDescriptor数据好像不是8楼给出的那样

你再仔细看看。

如果还没到发送数据包就被Reset,多数情况是某个描述符有问题。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表