打印

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

[复制链接]
6913|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 | 只看该作者
顶顶顶

使用特权

评论回复
5
香水城| | 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的下位机不会自动向上位机发送数据,你怎么用回调函数实现呢?

使用特权

评论回复
6
网络转接| | 2012-4-1 18:00 | 只看该作者
请参看我开发板的 usb的历程  vb控制led 自动读取 adc值

使用特权

评论回复
7
hzlyes_123|  楼主 | 2012-4-2 11:20 | 只看该作者
回 6楼 ,我下位机是10ms 发一次数据给上位机。

使用特权

评论回复
8
hzlyes_123|  楼主 | 2012-4-2 11:43 | 只看该作者
感谢 7 楼的,你的例程我都看了,但怎么找不到源码呢,只找到安装上可执行程序。

使用特权

评论回复
9
beyond696| | 2012-4-2 13:33 | 只看该作者
USB传输数据必须由主机发起,你下位机若为从机是不可能主动发送数据的,必须由上位机读取数据

使用特权

评论回复
10
hzlyes_123|  楼主 | 2012-4-2 15:40 | 只看该作者
那照你这样说,PC必须不停的发消息给键盘鼠标它们才能工作吗?

使用特权

评论回复
11
香水城| | 2012-4-2 18:12 | 只看该作者
应该说: PC必须不停的请求键盘鼠标发回数据才能正常工作。

使用特权

评论回复
12
hzlyes_123|  楼主 | 2012-4-2 20:22 | 只看该作者
那好,从机响应PC主机请求后,从机发回数据,PC 的VB 程序怎样才能知道数据已到呢 ?  要调用哪一API函数呢?  以前用CH375时里面就有个设置中断的函数 CH375SetIntRoutine ,数据来到时它会自动调用用户自己编写的程序。

使用特权

评论回复
13
ilymy| | 2012-4-3 10:09 | 只看该作者
我是开了一个线程,在线程中不断readfile,读到数就处理
至于  “USB传输数据必须由主机发起”,个人认为那是底层的东西,不管他就行了

使用特权

评论回复
14
hzlyes_123|  楼主 | 2012-4-3 12:35 | 只看该作者
唉,看来只能用定时器来不停的读了

使用特权

评论回复
15
zhangli019| | 2012-4-3 13:16 | 只看该作者
呵呵,看来USB是一个主从协议,一直都没留意过啊

使用特权

评论回复
16
ahgao| | 2012-4-3 14:41 | 只看该作者
有3种方法

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

具体内容推荐看MSDN,很详细的。

使用特权

评论回复
17
hzlyes_123|  楼主 | 2012-4-3 20:27 | 只看该作者
好的,谢谢提醒。

使用特权

评论回复
18
一般首席| | 2013-5-12 17:53 | 只看该作者
用定时器的方法,如果读完缓冲区的数据后,定时器时间一到又要读取数据,但缓冲区内没有数据,这时程序会挂起,这怎么处理?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

64

帖子

0

粉丝