历史上的今天

今天是:2025年07月30日(星期三)

正在发生

2019年07月30日 | STM32f103 USB移植之USB标准描述符

发布者:美丽的1号 来源: eefocus关键字:STM32f103  USB移植  USB标准描述符 手机看文章 扫描二维码
随时随地手机看文章

在对USB协议进行学习和移植的过程有个东西不可避免,肯定会遇到,那就是USB的设备描述符。这个东西始终在usb协议中发挥作用,从设备的枚举到设备的配置,都是由usb描述符进行修改的。今天在移植的时候这个整理了一下usb描述符有关的知识。


/********************************************不啰嗦的分割线***********************************************/

 参考资料:深入浅出USB系统开发——基于ARM Cortex-M3    王川北 刘强

圈圈教你玩usb

http://www.openedv.com/thread-10971-1-1.html


USB采用USB标准描述符说明一个USB设备,这些描述符包括设备描述符、配置描述符、接口描述符、端点描述符和字串描述符。在stm32 usb库中有关描述符在usb_desc.c和usb_desc.h中。


在上个例程中并未对描述符进行修改,直接使用了原来配置,现在我们对描述符进行修改,在该示例中的配置为usb键盘的描述符设置。


设备描述符给出了usb的一般信息,一个usb设备只能有一个设备描述符。在stm32 usb库中有关配置及含义如图所示。


在usb库中除设备描述符以外的其他所有描述符均在Joystick_ConfigDescriptor[JOYSTICK_SIZ_CONFIG_DESC]这个数组中

如果对描述符进行增删后,注意更改数组大小,在usb_desc.h中定义。

以下为配置描述符的说明,在一个usb设备描述符下可以有多个配置描述符。

以下为接口描述符的说明,在一个usb配置描述符下可以有多个接口描述符。

端点描述符,每个端点只能用作输入或输出的一种,端点0不可配置。


HID为人机交互设备(Human Interface Device)的缩写,HID设备类除了支持标准USB描述符外,还自行定义了3种设备描述符,分别为HID描述符、报告描述符、物理描述符。一个HID设备只支持一个HID描述符;可以支持一个或多个报告描述符;物理描述符是可选的,发多数HID设备不需要使用它。


下面为为HID描述符及说明


 //以下为HID描述符

/******************** Descriptor of Joystick Mouse HID ********************/

/* 18 */

0x09,         /*bLength: HID Descriptor size 字节数*/

HID_DESCRIPTOR_TYPE, /*bDescriptorType: HID 配置描述符类型*/

0x00,         /*bcdHID: HID Class Spec release number         版本号*/

0x01,

0x00,         /*bCountryCode: Hardware target country         国家语言代码*/

0x01,         /*bNumDescriptors: Number of HID class descriptors to follow 描述符个数*/

0x22,         /*bDescriptorType 下一个描述符类型*/

JOYSTICK_SIZ_REPORT_DESC,/*wItemLength: Total length of Report descriptor 报告描述符总长度*/

0x00,

下面为HID的报告描述符

const uint8_t Joystick_ReportDescriptor[JOYSTICK_SIZ_REPORT_DESC] =

  {                                                                           

0x05, 0x01, // USAGE_PAGE (Generic Desktop)

0x09, 0x06, // USAGE (Keyboard)

0xa1, 0x01, // COLLECTION (Application)

0x05, 0x07, //         USAGE_PAGE (Keyboard/Keypad)

0x19, 0xe0, //         USAGE_MINIMUM (Keyboard LeftControl)

0x29, 0xe7, //         USAGE_MAXIMUM (Keyboard Right GUI)

0x15, 0x00, //         LOGICAL_MINIMUM (0)

0x25, 0x01, //         LOGICAL_MAXIMUM (1)

0x95, 0x08, //         REPORT_COUNT (8)

0x75, 0x01, //         REPORT_SIZE (1)

0x81, 0x02, //         INPUT (Data,Var,Abs)

0x95, 0x01, //         REPORT_COUNT (1)

0x75, 0x08, //         REPORT_SIZE (8)

0x81, 0x03, //         INPUT (Cnst,Var,Abs)

0x95, 0x06, //    REPORT_COUNT (6)

0x75, 0x08, //    REPORT_SIZE (8)

0x25, 0xFF, //    LOGICAL_MAXIMUM (255)

0x19, 0x00, //    USAGE_MINIMUM (Reserved (no event indicated))

0x29, 0x65, //    USAGE_MAXIMUM (Keyboard Application)

0x81, 0x00, //         INPUT (Data,Ary,Abs)

0x25, 0x01, //         LOGICAL_MAXIMUM (1)

0x95, 0x02, //    REPORT_COUNT (2)

0x75, 0x01, //    REPORT_SIZE (1)

0x05, 0x08, //    USAGE_PAGE (LEDs)

0x19, 0x01, //    USAGE_MINIMUM (Num Lock)

0x29, 0x02, //    USAGE_MAXIMUM (Caps Lock)

0x91, 0x02, //    OUTPUT (Data,Var,Abs)

0x95, 0x01, //    REPORT_COUNT (1)

0x75, 0x06, //    REPORT_SIZE (6)

0x91, 0x03, //    OUTPUT (Cnst,Var,Abs)

0xc0        // END_COLLECTION

  }


好了,我们对上面的描述符进行修改后,编译下载,在电脑上可以识别出键盘,在后面的会继续介绍usb键盘的移植过程


关键字:STM32f103  USB移植  USB标准描述符 引用地址:STM32f103 USB移植之USB标准描述符

上一篇:使用STM32L053探索板上的IDD电流检测功能
下一篇:MDK5新建stm32l0xx(Cortex-M0)工程步骤

推荐阅读

1.中断的基本概念当单片机正在执行程序时,出现了某些特殊状况,例如定时时间到、有键盘信号输入等,此时CPU须要暂时停止当前的程序,而转去执行处理这些事件的程序,待执行完这些特定的程序之后,再返回到原先的程序去执行,这就形成了一次“中断”。“中断”加强了单片机处理突发事件的能力,如果没有中断功能,对可能发生的特殊状况的处理就必须采用定...
目前,网络上关于stm32l0xx系列mcu的资料比较少,l0低功耗系列普遍应用了st公司新出的HAL库,由于没有中文资料,并且HAL库与原来的标准库有一些区别,因此开发起来有一定的难度。本文先从最基本的新建工程入手,后续将陆续记录关于stm32l051c8x的一些应用过程,记录开发过程中遇到的一些问题、思考及心得,以期在做导师项目的过程中最大限度的增添一些乐趣...
BOCCO emo是来自日本新宿Yukai Engineering的通信机器人。它的界面非常简单,因此任何人都可以轻松使用它,包括不需要或无法使用智能手机的小孩或老人。BOCCO emo的主要目的是通过与智能手机应用程序之间收发消息,将家里的家人与外出的家人联系起来。 它也可以用于医院或疗养院,将患者与医护人员联系起来。 还可以设置BOCCO emo发出声音提醒,例如...
MC9S12XEP100的Flash(S12XFTM1024K5V2)包含:1024KB的P-Flash 内存,包含5个物理Flash blocks,用于存储非易失性代码。32KB的D-Flash内存,由一个物理Flash block组成,可作为Flash内存存储非易失性数据,或用于支持内建的模拟EEPROM。4KB的缓存RAM,由一个物理RAM block组成,可用作普通的RAM,或者用于支持内建的模拟EEPROM。MC9S12(X)系列单片机的F...

史海拾趣

小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved