搜索
bottom↓
回复: 533

STM32 USB HID开发实例,实现USB双向通信!

  [复制链接]

出0入0汤圆

发表于 2010-6-17 15:46:15 | 显示全部楼层 |阅读模式
STM32 USB HID开发实例,实现USB双向通信。

在STM32 ARM平台上实现USB与PC端得通信(IC为STM32F10XX系列)。本文提供一个例程(已测试通过),不用了解任何USB协议(当然了解USB相关协议或描述表的意义是很必要的),在此例程上,稍作修改,即可开展你的项目或学习或进行产品开发。

在ST中我们可以获得了USB相关的一个HID例程,但是官方例子中只是用到2个端点。数据只收不发。

本例程中,用到了3个USB端点,实现PC上位机与下位机见双向通信。EP0为控制端点(必须的,这是因为系统默认端点0作为控制传输端点),EP1为INTERRUPT OUT端点(数据输出端,即PC向MCU发送数据段),EP2为INTERRUPT OUT端点(数据输入端,即MCU向PC发送数据)。

实现过程,我们需要修改一下HID的描述表,修改如下(有详细注释)

/* USB Configuration Descriptor */

/*   All Descriptors (Configuration, Interface, Endpoint, Class, Vendor */

const u8 CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] =

  {

    0x09, /* bLength: Configuation Descriptor size */

    USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */

    CUSTOMHID_SIZ_CONFIG_DESC,

    /* wTotalLength: Bytes returned */

    0x00,

    0x01,         /* bNumInterfaces: 1 interface */

    0x01,         /* bConfigurationValue: Configuration value */

    0x00,         /* iConfiguration: Index of string descriptor describing

                                 the configuration*/

    0xC0,         /* bmAttributes: Bus powered */

                  /*Bus powered: 7th bit, Self Powered: 6th bit, Remote wakeup: 5th bit, reserved: 4..0 bits */

    0x32,         /* MaxPower 100 mA: this current is used for detecting Vbus */

//    0x96,         /* MaxPower 300 mA: this current is used for detecting Vbus */

    /************** Descriptor of Custom HID interface ****************/

    /* 09 */

    0x09,         /* bLength: Interface Descriptor size */

    USB_INTERFACE_DESCRIPTOR_TYPE,/* bDescriptorType: Interface descriptor type */

    0x00,         /* bInterfaceNumber: Number of Interface */

    0x00,         /* bAlternateSetting: Alternate setting */

    0x02,         /* bNumEndpoints */

    0x03,         /* bInterfaceClass: HID */

    0x00,         /* bInterfaceSubClass : 1=BOOT, 0=no boot */

    0x00,         /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */

    0,            /* iInterface: Index of string descriptor */

    /******************** Descriptor of Custom HID HID ********************/

    /* 18 */

    0x09,         /* bLength: HID Descriptor size */

    HID_DESCRIPTOR_TYPE, /* bDescriptorType: HID */

    0x10,         /* bcdHID: HID Class Spec release number */

    0x01,

    0x00,         /* bCountryCode: Hardware target country */

    0x01,         /* bNumDescriptors: Number of HID class descriptors to follow */

    0x22,         /* bDescriptorType */

    CUSTOMHID_SIZ_REPORT_DESC,/* wItemLength: Total length of Report descriptor */

    0x00,

    /******************** Descriptor of Custom HID endpoints ******************/

    /* 27 */

    0x07,          /* bLength: Endpoint Descriptor size */

    USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */



    0x82,          /* bEndpointAddress: Endpoint Address (IN) */               

                   // bit 3...0 : the endpoint number

                   // bit 6...4 : reserved

                    // bit 7     : 0(OUT), 1(IN)

    0x03,          /* bmAttributes: Interrupt endpoint */

    0x40,//0x02,          /* wMaxPacketSize: 20 Bytes max */

    0x00,

    0x20,          /* bInterval: Polling Interval (32 ms) */

    /* 34 */

           

    0x07,      /* bLength: Endpoint Descriptor size */

    USB_ENDPOINT_DESCRIPTOR_TYPE,   /* bDescriptorType: */

                     /*    Endpoint descriptor type */

    0x01,      /* bEndpointAddress: */

                     /*    Endpoint Address (OUT) */

    0x03,      /* bmAttributes: Interrupt endpoint */

    0x40,//0x02,   /* wMaxPacketSize: 20 Bytes max  */

    0x00,

    0x10,      /* bInterval: Polling Interval (16 ms) */

    /* 41 */

  }; /* CustomHID_ConfigDescriptor */

关于如何理解HID 描述表,请参考USB HID协议1.1版本,相关资料可以在网络上搜索得到。

在此,现提供KEIL MDK 和 IAR EWARM 5.4版本的例子,欢迎下载。萝卜青菜,喜欢用MDK,就MDK,喜欢EWARM,就EWARM。同样这里有见有意思的事,在全编译的情况下,EWARM要比MDK编译速度要快一些。

相关测试结果如下:

通过呀呀USB_hid 或Bus Hound相关工具,先发一包数据给下位机,这样下位机每隔1s会发送一包数据。结果如图:

呀USB_hid可以在本博客上下载^_^: http://blog.ednchina.com/itspy

测试结果 (原文件名:hid.jpg)

KEIL MDK版本(4.0)ourdev_562236.rar(文件大小:362K) (原文件名:MyUSB_HID_KEIL.rar)
IAR EWARM版本(v5.4)ourdev_562237.rar(文件大小:362K) (原文件名:MyUSB_HID_KEIL.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-6-17 16:14:36 | 显示全部楼层
好东西,顶

出0入0汤圆

发表于 2010-6-17 16:46:53 | 显示全部楼层
谢谢楼主!

出0入0汤圆

发表于 2010-6-17 17:13:51 | 显示全部楼层
这个要MARK

出0入0汤圆

发表于 2010-6-17 17:25:20 | 显示全部楼层
谢谢你

出0入0汤圆

发表于 2010-6-17 17:29:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-17 17:35:01 | 显示全部楼层
好东西,正在学习USB,谢谢LZ

出0入0汤圆

发表于 2010-6-17 17:58:34 | 显示全部楼层
好东西,mark STM32 USB HID开发实例

出0入0汤圆

发表于 2010-6-17 18:21:19 | 显示全部楼层
一定要顶,谢谢!

出0入0汤圆

发表于 2010-6-17 18:48:34 | 显示全部楼层
上位机的源码开一下就更好了

出0入0汤圆

发表于 2010-6-17 18:51:44 | 显示全部楼层
谢谢LZ,继续学习了!

出0入0汤圆

发表于 2010-6-17 19:00:20 | 显示全部楼层
学习了

出0入0汤圆

 楼主| 发表于 2010-6-17 19:35:31 | 显示全部楼层
回复【9楼】fisher3014
上位机的源码开一下就更好了

-----------------------------------------------------------------------

会开的,
呵呵

出0入0汤圆

 楼主| 发表于 2010-6-17 19:35:53 | 显示全部楼层
好的话,到我的博客去顶啊

出0入0汤圆

发表于 2010-6-17 21:42:08 | 显示全部楼层
感谢LZ

出0入0汤圆

发表于 2010-6-17 21:47:40 | 显示全部楼层
非常感谢,很酷的资料,呵呵,要是中文注释就更好了!

出0入0汤圆

发表于 2010-6-17 22:22:59 | 显示全部楼层
不错啊,下载了参考。昨天刚订了一块STM32的开发板。

出0入0汤圆

发表于 2010-6-17 23:07:29 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-17 23:17:54 | 显示全部楼层
不顶怎么对的起楼主呀!

出0入0汤圆

发表于 2010-6-17 23:25:06 | 显示全部楼层
回复【12楼】itspy 独舞
回复【9楼】fisher3014  
上位机的源码开一下就更好了  
-----------------------------------------------------------------------
会开的,
呵呵
-----------------------------------------------------------------------

就顶这句话

出0入0汤圆

发表于 2010-6-17 23:37:39 | 显示全部楼层
真不错

出0入0汤圆

发表于 2010-6-17 23:46:26 | 显示全部楼层
回复【12楼】itspy 独舞
回复【9楼】fisher3014   
上位机的源码开一下就更好了   
-----------------------------------------------------------------------  
会开的,  
呵呵
-----------------------------------------------------------------------

再顶这句话

出0入0汤圆

发表于 2010-6-18 00:02:08 | 显示全部楼层
markmark

出0入0汤圆

发表于 2010-6-18 08:22:58 | 显示全部楼层
mark  强贴

出0入0汤圆

发表于 2010-6-18 10:35:16 | 显示全部楼层
回复【12楼】itspy 独舞  
回复【9楼】fisher3014   
上位机的源码开一下就更好了   
-----------------------------------------------------------------------   
会开的,   
呵呵  
-----------------------------------------------------------------------  

再顶这句话  
-----------------------------------------------------------------------

再顶这句话

出0入0汤圆

发表于 2010-6-18 10:42:34 | 显示全部楼层
回复【12楼】itspy 独舞   
回复【9楼】fisher3014     
上位机的源码开一下就更好了     
-----------------------------------------------------------------------   
会开的,   
呵呵   
-----------------------------------------------------------------------   

再顶这句话   
-----------------------------------------------------------------------

再顶这句话

出0入0汤圆

发表于 2010-6-18 10:54:52 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-6-18 13:24:46 | 显示全部楼层
顶.学习了.多谢LZ

出0入0汤圆

发表于 2010-6-18 13:26:27 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-6-18 13:29:40 | 显示全部楼层

出0入0汤圆

发表于 2010-6-18 13:32:25 | 显示全部楼层
感谢楼主无私奉献

出0入0汤圆

发表于 2010-6-20 07:59:16 | 显示全部楼层
z怎么今天试验,下载的KEIL 版本编译通不过哦,有没有通过了的,上传一个,谢谢!

出0入0汤圆

发表于 2010-6-20 08:22:24 | 显示全部楼层
回复【25楼】li0713
回复【12楼】itspy 独舞   
回复【9楼】fisher3014      
上位机的源码开一下就更好了      
-----------------------------------------------------------------------     
会开的,     
呵呵   
-----------------------------------------------------------------------   
再顶这句话   
-----------------------------------------------------------------------  
再顶这句话     
-----------------------------------------------------------------------

复顶!!!不知道大约什么时候放

出0入0汤圆

发表于 2010-6-20 13:57:39 | 显示全部楼层
回复【楼主位】itspy 独舞
-----------------------------------------------------------------------

‘当然了解USB相关协议或描述表的意义是很必要的’  希望楼主详细说明下,描述表如何修改!再次感谢!



---------------------------------------------------------------------------

楼主上传的MDK工程,是可以用的,一次编译通过!

出0入4汤圆

发表于 2010-6-20 14:04:08 | 显示全部楼层
我顶

出0入0汤圆

发表于 2010-6-20 15:54:50 | 显示全部楼层
【33楼】 nomoneyiv:

能否你把编译通过的上传一个呢?我的怎么就通不过呢,是不是还差文件或我哪个地方弄得不对,谢谢!

有图为证:

(原文件名:未命名1.JPG)

去掉配置文件或子程序就可以通过,但这样不对的:

(原文件名:未命名2.JPG)

出0入0汤圆

发表于 2010-6-20 16:31:26 | 显示全部楼层
顶一下!

出0入4汤圆

发表于 2010-6-20 19:33:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-20 21:49:08 | 显示全部楼层
非常强大,顶~

出0入0汤圆

发表于 2010-6-20 23:25:05 | 显示全部楼层
正需要学习

出0入0汤圆

发表于 2010-6-21 00:12:04 | 显示全部楼层
顶一下当

出0入0汤圆

发表于 2010-6-21 07:00:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-21 10:09:56 | 显示全部楼层
顶一下!

出0入0汤圆

发表于 2010-6-21 10:24:10 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-6-21 16:16:07 | 显示全部楼层
回复【33楼】nomoneyiv
回复【楼主位】itspy 独舞
-----------------------------------------------------------------------
‘当然了解usb相关协议或描述表的意义是很必要的’  希望楼主详细说明下,描述表如何修改!再次感谢!
---------------------------------------------------------------------------
楼主上传的mdk工程,是可以用的,一次编译通过!
-----------------------------------------------------------------------

谢谢支持说明!以测试的没有理由不通过。 ^_^

出0入0汤圆

 楼主| 发表于 2010-6-21 16:18:58 | 显示全部楼层
回复【35楼】hetao7241
【33楼】 nomoneyiv:
能否你把编译通过的上传一个呢?我的怎么就通不过呢,是不是还差文件或我哪个地方弄得不对,谢谢!  
有图为证:


(原文件名:未命名1.jpg)
引用图片
去掉配置文件或子程序就可以通过,但这样不对的:


(原文件名:未命名2.jpg)
<center><a class=tt16 onclick="fnqu......
-----------------------------------------------------------------------

不知道你怎么用了, 是你用法不对吧
----
直接编译即可,不用改什么的

出0入0汤圆

发表于 2010-6-21 17:57:21 | 显示全部楼层
对不起楼主!我原来采用的是MDK3.8版本,始终弄不对。

今天下载了个 4.10版本就对了。

谢谢楼主奉献!

出0入0汤圆

发表于 2010-6-23 14:04:13 | 显示全部楼层
程序呢,老大,不要不给啊,让我们干着急

出0入0汤圆

发表于 2010-6-23 14:05:20 | 显示全部楼层
好东西,顶

出0入0汤圆

发表于 2010-6-23 14:17:57 | 显示全部楼层
mark  强贴

出0入0汤圆

发表于 2010-6-23 14:24:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-23 15:29:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-24 16:58:42 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-5 16:38:38 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-7-5 20:56:16 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-5 21:22:30 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-5 21:28:56 | 显示全部楼层
好东西,值得研究

出0入0汤圆

发表于 2010-7-5 22:03:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-7 10:00:07 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-7-9 21:59:55 | 显示全部楼层
回复【32楼】fisher3014
回复【25楼】li0713  
回复【12楼】itspy 独舞     
回复【9楼】fisher3014      
上位机的源码开一下就更好了      
-----------------------------------------------------------------------      
会开的,      
呵呵     
-----------------------------------------------------------------------     
再顶这句话     
-----------------------------------------------------------------------   
再顶这句话      
----------------------------------------------......
-----------------------------------------------------------------------

出0入0汤圆

发表于 2010-7-9 22:25:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-9 23:12:32 | 显示全部楼层

出0入0汤圆

发表于 2010-7-16 10:26:01 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-7-16 11:23:23 | 显示全部楼层
very cool!

出0入0汤圆

发表于 2010-7-18 19:56:47 | 显示全部楼层
路过,学习啦

出0入9汤圆

发表于 2010-7-19 14:07:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-19 21:25:17 | 显示全部楼层
怎么都是KEIL的程序?

出0入0汤圆

发表于 2010-7-22 15:28:13 | 显示全部楼层
这个要MARK

出0入0汤圆

发表于 2010-7-23 13:36:59 | 显示全部楼层
回复【59楼】fisher3014
回复【32楼】fisher3014  
回复【25楼】li0713   
回复【12楼】itspy 独舞      
回复【9楼】fisher3014        
上位机的源码开一下就更好了        
-----------------------------------------------------------------------      
会开的,      
呵呵      
-----------------------------------------------------------------------      
再顶这句话      
-----------------------------------------------------------------------   
再顶这句话      
---------------......
-----------------------------------------------------------------------

出0入0汤圆

发表于 2010-7-25 12:46:12 | 显示全部楼层
mark

出0入8汤圆

发表于 2010-7-29 13:46:49 | 显示全部楼层
实在难以掩盖内心的激动之情,唯。。。。。顶!!!!!!!!!!

出0入0汤圆

发表于 2010-7-29 18:58:50 | 显示全部楼层
我烧到单片机里怎么没反应啊,电脑找不到设备啊

出0入0汤圆

发表于 2010-7-29 19:18:56 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-7-29 20:53:14 | 显示全部楼层
记号~~

出0入0汤圆

发表于 2010-7-29 21:01:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-29 21:58:40 | 显示全部楼层
mark

出10入0汤圆

发表于 2010-7-29 22:03:32 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-8-4 23:11:39 | 显示全部楼层
mark mark mark mark mark

出0入0汤圆

发表于 2010-8-5 09:12:42 | 显示全部楼层
很好,记录下来了。顶一个。

出0入0汤圆

发表于 2010-8-15 15:48:10 | 显示全部楼层
怎么我下载的里面没有已建立的工程文件啊。。郁闷,,谁编译过了,给我传一下好不?
最近正好在学习,,谢谢啊。。。hongwg86@163.com

出0入0汤圆

发表于 2010-8-15 16:20:36 | 显示全部楼层
大家都在顶。。有不有测试通过的。。 有那么2 3个人不同德开发板都通过的 就证明没有什么大问题了。

出0入0汤圆

发表于 2010-8-15 19:34:48 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-16 10:27:38 | 显示全部楼层
谢谢楼主,把程序烧进去就可以正常传输显示,但是用J-link仿真调试就不行,不知怎么回事?

出0入0汤圆

发表于 2010-8-16 16:02:13 | 显示全部楼层
马克!!

出0入0汤圆

发表于 2010-8-16 16:54:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-17 10:41:23 | 显示全部楼层
我先留个记号吧,还没研究明白呢!以后一定来交流哈!

出0入0汤圆

发表于 2010-8-17 13:04:45 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-18 15:11:31 | 显示全部楼层
我先留个记号吧,还没研究明白呢

出0入0汤圆

发表于 2010-8-18 17:58:11 | 显示全部楼层
mark!~

出0入0汤圆

发表于 2010-8-18 21:41:14 | 显示全部楼层
看热闹的路过

出0入0汤圆

发表于 2010-8-19 13:25:18 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-19 22:48:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-23 21:43:31 | 显示全部楼层
HID双向传输,要好好学学,很有用。

出0入0汤圆

发表于 2010-8-25 15:41:29 | 显示全部楼层
首先谢谢楼主 但是怎么都是KEIL的程序?楼主是不是上传错了  能否将IAR的工程传一下

出0入0汤圆

发表于 2010-8-25 15:59:08 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-8-25 22:13:45 | 显示全部楼层
顶!

出0入0汤圆

发表于 2010-8-25 22:34:52 | 显示全部楼层
没有上位机,怎么用啊?

出0入0汤圆

发表于 2010-8-26 09:08:57 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-8-26 11:15:56 | 显示全部楼层
一定要顶上...

出0入0汤圆

发表于 2010-8-30 16:15:09 | 显示全部楼层
mark STM32 USB HID
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 14:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表