USB通信怎么做啊?

john_liqinghan 2012-12-14 10:52:38
看了一天,不懂?本来想使用STM32通过USB发送数据给计算机,计算机上位机接收数据打算另写!
但是那个Joystick_ReportDescriptor该怎么填啊,用了HID Description tool不知道怎么弄,什么usage_page
usage,collection....怎么选择?仅仅只做发送,所以一端口就可以了吧?

...全文
3699 82 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
82 条回复
切换为时间正序
请发表友善的回复…
发表回复
john_liqinghan 2013-05-22
  • 打赏
  • 举报
回复
引用 81 楼 jiege0129 的回复:
现在情况是按照白皮书写了两点的报告描述符,发送了两点,却只显示一点,不知是什么原因啊
那个白皮书我还没仔细看,还不太懂!
jiege0129 2013-05-15
  • 打赏
  • 举报
回复
现在情况是按照白皮书写了两点的报告描述符,发送了两点,却只显示一点,不知是什么原因啊
john_liqinghan 2013-05-15
  • 打赏
  • 举报
回复
引用 79 楼 jiege0129 的回复:
497086461@qq.com 感激不尽
看微软的白皮书哪里就有了的!
jiege0129 2013-05-13
  • 打赏
  • 举报
回复
497086461@qq.com 感激不尽
jiege0129 2013-05-13
  • 打赏
  • 举报
回复
你好,最近也在学习usb,能否发一份多点触摸屏的例程给我,感激不尽
dongshuangrui10 2013-04-24
  • 打赏
  • 举报
回复
STM32或是LPC1766上面带USB模块的!在开发环境的安装目录下都有例程的吧!为什么不用例程?
Simality 2013-02-22
  • 打赏
  • 举报
回复
引用 75 楼 liqinghan 的回复:
引用 74 楼 liqinghan 的回复:引用 72 楼 Alex_rcpilot 的回复: Endpoint descriptor里的max packet size域也确认没问题?都没问题的话可能是你加的地方不对了。 首先追踪一下gHIDInstance.usOutReportSize这个值是不是你期望的值。 然后试一试仅在USB_prop.c文件v……
如果没有人像讨债似的追在屁股后面催你搞,而且自己也没太大的动力,那么两个月够快了。
john_liqinghan 2013-02-22
  • 打赏
  • 举报
回复
引用 74 楼 liqinghan 的回复:
引用 72 楼 Alex_rcpilot 的回复: Endpoint descriptor里的max packet size域也确认没问题?都没问题的话可能是你加的地方不对了。 首先追踪一下gHIDInstance.usOutReportSize这个值是不是你期望的值。 然后试一试仅在USB_prop.c文件void Jo……
HID Complaint Device层,和USB输入设备层后面的数据同的原因是: 使用SetEPTxCount(ENDP2,len);小于了ReportID 对应的数据报告的大小。所以后面的会收不到! 结贴了!都两个月了,USB也搞得不三不四!效率太低!!!
john_liqinghan 2013-02-22
  • 打赏
  • 举报
回复
引用 72 楼 Alex_rcpilot 的回复:
引用 71 楼 liqinghan 的回复: 是啊! Endpoint descriptor里的max packet size域也确认没问题?都没问题的话可能是你加的地方不对了。 首先追踪一下gHIDInstance.usOutReportSize这个值是不是你期望的值。 然后试一试仅在USB_prop.c文件void Joystick_Reset(void)函数里设置包大小。……
请问一下,设备发送数据首先是到达USB输入设备层,然后如果应用程序请求数据,是向HID Complaint Device读数据的,HID Complaint Device在向USB输入设备层请求数据。我在做数据发送和接收的时候,PC机发送的数据HID Complaint Device层,和USB输入设备层的数据都是相同的。但是为什么设备发送上去的数据,HID Complaint Device层,和USB输入设备层前面的一些数据相等,但是后面的数据就不等了的!为什么呢?
john_liqinghan 2013-02-19
  • 打赏
  • 举报
回复
引用 5 楼 liqinghan 的回复:
shit,懂了,一个端点号可同时设置为输入、输出的!
理解了,端点号并不等同于端点,一个端点号(端点号0除外)拥有两个端点,一个是IN端点,一个是out端点,但是一个端点只有一个方向,端点号有两个方向!
Simality 2013-02-05
  • 打赏
  • 举报
回复
引用 71 楼 liqinghan 的回复:
是啊!
Endpoint descriptor里的max packet size域也确认没问题?都没问题的话可能是你加的地方不对了。 首先追踪一下gHIDInstance.usOutReportSize这个值是不是你期望的值。 然后试一试仅在USB_prop.c文件void Joystick_Reset(void)函数里设置包大小。 看得出你是想在max packet size限度以内使用变长度的数据包,我不建议用这个方法。Joystick_Reset()这个函数是用来复位设备的,这个函数执行的阶段很多内容没有完成初始化。很有可能它设置的内容只有在这个阶段允许更改,初始化完成之后就不允许变动了。所以你最好观察一下这个函数执行的时候赋值是多少。 另外你执行填充缓冲区、发送数据的位置可能会对程序执行结果产生影响,但我觉得可能性不大。
john_liqinghan 2013-02-05
  • 打赏
  • 举报
回复
引用 70 楼 Alex_rcpilot 的回复:
引用 69 楼 liqinghan 的回复: 地址我设置对了的,更奇怪的是,当我在程序中加入如下代码,只能发送八…… USB_prop.c里面,这句话SetEPTxCount(ENDPx, nn);赋值用的是你的宏?
是啊!
Simality 2013-02-05
  • 打赏
  • 举报
回复
引用 69 楼 liqinghan 的回复:
地址我设置对了的,更奇怪的是,当我在程序中加入如下代码,只能发送八……
USB_prop.c里面,这句话SetEPTxCount(ENDPx, nn);赋值用的是你的宏?
john_liqinghan 2013-02-05
  • 打赏
  • 举报
回复
引用 68 楼 Alex_rcpilot 的回复:
引用 67 楼 liqinghan 的回复: 我发现一个问题,就是的USB在发送<=36个字节时候是无论你发送多少次都是可以的。担当我的字节数超过36个字节的时候就不行了!没有反应了?是什么问题难道是其他的设置错误吗? 检查你的缓冲区初始化代码。
地址我设置对了的,更奇怪的是,当我在程序中加入如下代码,只能发送八个字节了!大于八个就不行了。 if(gHIDInstance.usOutReportSize!=0)//这个是放在接收中断里面进行填充,存储主机实际发过来的字节数。 { SetEPTxCount(ENDP1,gHIDInstance.usOutReportSize); UserToPMABufferCopy(send_buffer, ENDP1_TXADDR,gHIDInstance.usOutReportSize); SetEPTxStatus(ENDP1, EP_TX_VALID); gHIDInstance.usOutReportSize=0; } 端口的定义 #define ENDP1_TXBUF 0x40//TX线上字节数 #define ENDP1_RXBUF 0x40//RX线上字节数 #define ENDP1_TXADDR (0x100) #define ENDP1_RXADDR (ENDP1_TXADDR+ENDP1_TXBUF+4)
Simality 2013-02-04
  • 打赏
  • 举报
回复
引用 67 楼 liqinghan 的回复:
我发现一个问题,就是的USB在发送<=36个字节时候是无论你发送多少次都是可以的。担当我的字节数超过36个字节的时候就不行了!没有反应了?是什么问题难道是其他的设置错误吗?
检查你的缓冲区初始化代码。
john_liqinghan 2013-02-04
  • 打赏
  • 举报
回复
我发现一个问题,就是的USB在发送<=36个字节时候是无论你发送多少次都是可以的。担当我的字节数超过36个字节的时候就不行了!没有反应了?是什么问题难道是其他的设置错误吗?
john_liqinghan 2013-02-02
  • 打赏
  • 举报
回复
引用 65 楼 dongshuangrui10 的回复:
我刚接触USB!好多要了解的地方啊!
一样啊!
dongshuangrui10 2013-02-01
  • 打赏
  • 举报
回复
我刚接触USB!好多要了解的地方啊!
Simality 2013-02-01
  • 打赏
  • 举报
回复
如果report size不是8的整数倍,注意padding。
Simality 2013-02-01
  • 打赏
  • 举报
回复
引用 59 楼 liqinghan 的回复:
/*USAGE_PAGE (Vendor Defined Page 1)*/ 0x06,0x00,0xFF, /*USAGE (Vendor Usage 1)*/ 0x09,0x01, /*COLLECTION (Application)*/ ……
有可能几个Report ID不同的report不能在同一个collection段里面,甚至不能在同一个Usage或Usage Page段里面。你可以试试 Usage Page Usage Collection 第一个report End Collection //Usage Page // Usage Collection 第二个report End collection
加载更多回复(60)

27,510

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧