usb hid 方式,上位机数据自动接收问题?

[复制链接]
7816|17
 楼主| hzlyes_123 发表于 2012-3-30 23:44 | 显示全部楼层 |阅读模式
我用STM32 以 HID 方式做了个usb 控制。上位机是用VB 调用 API UsbHidApi.dll  里面Write2、Read 的函数,可以正常读和写,但都是手动方式, 尤其是读,必须人为调用Read 函数才能读到下位机发来的数据,这样的话效率很低,我想用回调函数的方式自动读取下位机实时发来的数据,不过很遗憾在网找了好久没找到相关的资料,且对usb开发不是很熟悉,请大家指点一二?  还有,大家在HID 方式下都用那些API函数?
梅花望青竹 发表于 2012-3-31 08:43 | 显示全部楼层
你可以使用上位机的定时器来定时的读取,不必要人工手动读!
 楼主| hzlyes_123 发表于 2012-3-31 16:56 | 显示全部楼层
用定时器当然可以,不过这样做效率太低了。 我觉得还是用回调函数的方法最好。
 楼主| hzlyes_123 发表于 2012-4-1 00:00 | 显示全部楼层
顶顶顶
香水城 发表于 2012-4-1 11:15 | 显示全部楼层
我用STM32 以 HID 方式做了个usb 控制。上位机是用VB 调用 API UsbHidApi.dll  里面Write2、Read 的函数,可以正常读和写,但都是手动方式, 尤其是读,必须人为调用Read 函数才能读到下位机发来的数据,这样的话效率很低,我想用回调函数的方式自动读取下位机实时发来的数据,不过很遗憾在网找了好久没找到相关的资料,且对usb开发不是很熟悉,请大家指点一二?  还有,大家在HID 方式下都用那些API函数?...
hzlyes_123 发表于 2012-3-30 23:44


USB的下位机不会自动向上位机发送数据,你怎么用回调函数实现呢?
网络转接 发表于 2012-4-1 18:00 | 显示全部楼层
请参看我开发板的 usb的历程  vb控制led 自动读取 adc值
 楼主| hzlyes_123 发表于 2012-4-2 11:20 | 显示全部楼层
回 6楼 ,我下位机是10ms 发一次数据给上位机。
 楼主| hzlyes_123 发表于 2012-4-2 11:43 | 显示全部楼层
感谢 7 楼的,你的例程我都看了,但怎么找不到源码呢,只找到安装上可执行程序。
beyond696 发表于 2012-4-2 13:33 | 显示全部楼层
USB传输数据必须由主机发起,你下位机若为从机是不可能主动发送数据的,必须由上位机读取数据
 楼主| hzlyes_123 发表于 2012-4-2 15:40 | 显示全部楼层
那照你这样说,PC必须不停的发消息给键盘鼠标它们才能工作吗?
香水城 发表于 2012-4-2 18:12 | 显示全部楼层
应该说: PC必须不停的请求键盘鼠标发回数据才能正常工作。
 楼主| hzlyes_123 发表于 2012-4-2 20:22 | 显示全部楼层
那好,从机响应PC主机请求后,从机发回数据,PC 的VB 程序怎样才能知道数据已到呢 ?  要调用哪一API函数呢?  以前用CH375时里面就有个设置中断的函数 CH375SetIntRoutine ,数据来到时它会自动调用用户自己编写的程序。
ilymy 发表于 2012-4-3 10:09 | 显示全部楼层
我是开了一个线程,在线程中不断readfile,读到数就处理
至于  “USB传输数据必须由主机发起”,个人认为那是底层的东西,不管他就行了
 楼主| hzlyes_123 发表于 2012-4-3 12:35 | 显示全部楼层
唉,看来只能用定时器来不停的读了
zhangli019 发表于 2012-4-3 13:16 | 显示全部楼层
呵呵,看来USB是一个主从协议,一直都没留意过啊
ahgao 发表于 2012-4-3 14:41 | 显示全部楼层
有3种方法

1、定时器轮询,适用于时间准确度要求不高的场合。
2、多线程,不断的ReadFile,同步和异步都可以,取决于你的系统设计。一般异步的适用面广些,但控制稍复杂一点。处理不好的话和定时器轮询差不多。这个方法的在不同系统中的可移植性较好。
3、使用RawInput处理数据输入,简单易用,当有数据时Windows会发一个消息给你,你只要自己处理这个消息即可,延时很小。但只能在WindowsXP及以后的系统上使用。

具体内容推荐看MSDN,很详细的。
 楼主| hzlyes_123 发表于 2012-4-3 20:27 | 显示全部楼层
好的,谢谢提醒。
一般首席 发表于 2013-5-12 17:53 | 显示全部楼层
用定时器的方法,如果读完缓冲区的数据后,定时器时间一到又要读取数据,但缓冲区内没有数据,这时程序会挂起,这怎么处理?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

66

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部