原创 万利的STM32板实现的自定义USB HID设备

2008-6-6 00:40 17916 11 24 分类: MCU/ 嵌入式

     大家知道,将一个USB设备定义为用户自定义的HID设备,就


可以让windows操作系统识别为一个HID兼容设备,并不需要用


户自己提供驱动程序,应用程序可以直接通过操作系统提供的


HID驱动来访问设备,这个特性是很方便的。当一个USB HID


设备被识别后,会在设备管理器里的“人体学输入设备”中增


加一个“USB 人体学输入设备”,如果它是一个用户自定义的


HID设备,还会在这里增加一个“HID-compliant device”的设


备。在驱动程序的层次,后者是在前者之上的。当设备返回数


据时,首先到达“USB 人体学输入设备”,并且缓冲起来,可


以缓冲多个数据包。如果这时应用软件从“HID-compliant


device”请求数据,则“HID-compliant device”会从“USB


人体学输入设备”请求数据,如果没有定义用途ID的话,


则还会自动在前面加上一个字节0作为用途ID。发送数据时


这个过程刚好相反。例如在我们这个例子中,应用程序每次读


取数据,将获得65字节的数据,第一字节是用途ID,为0。


后面的才是我们的设备返回的64字节数据。同样,发送数据


时,要发送65字节,第一字节为用途ID,实际发送到USB设备


的数据是64字节。这个过程我们在BUS HOUND上也可以看到,


并且也可以看到“HID-compliant device”是位于“USB 人体学


输入设备”之下的。


     下面这个程序就是圈圈在万利的STM32板上实现的自定义


HID设备。它使用了端点1的输入和输出,作为中断端点,端点


大小为64字节。这个仅是一个示例,它仅是简单的接收数据并


保存在OutBuffer中。当摇动摇杆时,就发送64字节一样的数据


到PC。具体的应用可由用户自己来决定。下载下面这个压缩


包,解压到Manley\EKBoard\EKSTM32F\USBDemo(8M osc)


\USBDemo\USBLib\demos目录下,然后编译,烧写调试即可。


下载本实验源代码包:点击下载


     下面这个压缩包是一个测试程序,可以用来测试HID设备。


填好VID和PID之后,再点击“find my device”,然后点


“once”,就会发送数据出去,同时试图读回数据。


这时摇动开发板上的摇杆,就会返回数据。每按一次,数据增加1。


下载测试程序:点击下载


本测试程序的源代码可从这里下载:http://group.ednchina.com/93/8769.aspx


 


看了之后记得点一下左上角的“顶一下”,支持一下圈圈,


给圈圈投一票,谢谢了!

PARTNER CONTENT

文章评论16条评论)

登录后参与讨论

用户377235 2014-12-9 12:10

看下别人的提问也有帮助,谢谢了

用户377235 2013-7-26 09:17

传说中的圈圈大哥,好像还有原子大哥,请帮忙,我快扛不住了,我用stm32自定义HID设备,上下位机都调通了,能正常通信,端点描述符里我设置轮询时间是1ms,这个时间对有些配置高的pc不起作用,pc每次接收到下位机发来的时间都要30ms左右,然后就通信速度奇慢,能给点建议吗? 具体描述请看 stm32例程修改的自定义hid设备,在配置高的pc上速度反而慢了 http://bbs.21ic.com/forum.php?mod=viewthread&tid=586506&fromuid=1088534

用户324358 2010-9-30 17:12

圈圈兄,我用你介绍的方法做了一个自定义HID设备,在windows xp系统下可以识别并用上位机软件控制,但是在win7下却出了问题: 插到电脑上后,在“设备管理器”中只出现“USB 人体学输入设备”,并且带着一个黄色的叹号,没有增加“HID-compliant device”,显示设备未打开,也不能用上位机软件打开设备,00兄遇到过这个问题吗?

computer00 2009-5-15 22:51

你仔细看看我的代码,有相应的代码的,不然怎么控制LED呢?

用户197234 2009-5-13 16:08

你好,已经可以从STM32向PC发数据,但想用PC向STM32发数据时没找到outbuffer数组,用source insight也没找到具体怎么调用的说,请教.......

computer00 2008-11-4 23:57

当然是分成多个数据包发送了~~~

用户390808 2008-11-4 11:15

圈圈大哥,我想用自定义HID设备,进行与上位机数据通信,看过你的这个例程,但是不太明白在从设备从主机接收数据时,如果一次的数据量超过64B,程序里该如何处理。

computer00 2008-9-20 13:34

你先按下摇杆再读数据试试?

用户1572896 2008-9-20 11:53

我下了你的程序,打开测试程序,直接用你那个VID和PID没有填,再点击“find my device”,然后点“once”,能出现Device detecte.但然后就是 readfile timeout,cannot read from device 按摇杆没有反应是怎么回事

computer00 2008-9-16 15:44

要连接那个USB口的。如果你仿真的话,要全速运行。
相关推荐阅读
computer00 2013-06-05 16:27
[招聘]Android系统开发工程师
任职要求: 1. 扎实的C/C++基础,熟悉嵌入式Linux和Android操作系统的软件开发; 2. 良好的沟通能力和逻辑思维能力; 3. 良好的英文文献阅读能力; 4. 具备...
computer00 2013-06-04 09:26
[招聘]Android应用开发工程师
任职要求: 1. 具备扎实的面向对象编程思想和JAVA编程基础; 2. 熟悉Eclipse+ADT开发环境,熟练掌握Android基本类库; 3. 熟悉网络应用和多媒体应用开发; ...
computer00 2012-09-26 13:15
圈圈的新浪官方围脖
http://weibo.com/computer00  ...
computer00 2012-09-26 13:12
欢迎大家去收听圈圈弹的曲子
http://www.tudou.com/home/_105209016  ...
computer00 2009-06-29 15:07
《圈圈教你玩USB》勘误(更新日期2009 年06月29日)
《圈圈教你玩USB》勘误(更新日期2009 年06月29日)下载地址1:下载地址2: 勘误.pdf...
computer00 2009-06-25 11:23
一块磐正845GE主板PS2接口的修复
圈圈有一部台式机,某天开机时,发现键盘用不了了,停留在输入BIOS密码那里。主机自检通过,但是蜂鸣器却发出很微弱的、连续的声音,同时键盘的三个LED也没有出现象往常一样的闪烁一下。圈圈以为多日未用,积...
EE直播间
更多
我要评论
16
11
关闭 站长推荐上一条 /3 下一条