zoukankan      html  css  js  c++  java
  • USB那点事3 -使用端口2作为custom HID的传输(转)

    源:USB那点事3 -使用端口2作为custom HID的传输

    USB custom HID例子中是使用了端口1作为通信,那么现在我使用端口2作为通信端了,该如何修改呢?如下所示:

    首先修改:usb_desc.c中的const u8 CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC]这个字符数组里面的内容:如下红色的为修改部分,未列出的不用修改:

        USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */
    
    
         0x82,          /* bEndpointAddress: Endpoint Address (IN) */
         0x03,          /* bmAttributes: Interrupt endpoint */
         0x02,          /* wMaxPacketSize: 2 Bytes max */
         0x00,
         0x20,          /* bInterval: Polling Interval (32 ms) */
         /* 34 */
         /*********OUT endpoint******/ 
         0x07, /* bLength: Endpoint Descriptor size */
         USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */
         /*Endpoint descriptor type */
         0x02, /*bEndpointAddress: */
         /*Endpoint Address (OUT) */
         0x03, /*bmAttributes: Interrupt endpoint */
         0x02, /*wMaxPacketSize: 2 Bytes max  */
         0x00,
         0x20, /* bInterval: Polling Interval (20 ms) */
         /* 41 */

    其次修改usb_conf.h文件,如下:

    /*-------------------------------------------------------------*/

    #define EP_NUM     (3) //这个很重要的。我改了好久都没主要这个这是指定设备所支持的端点数量,由于用到了端点2所以我使用3,当然的>=3

    /*-------------------------------------------------------------*/

    /* --------------   Buffer Description Table  -----------------*/

    /*-------------------------------------------------------------*/

    /* buffer table base address */

    /* buffer table base address */

    #define BTABLE_ADDRESS      (0x00)


    #define EPxByte  0x2 //端点传输的最大字节数

    /* EP0  */

    /* rx/tx buffer base address */

    #define ENDP0_RXADDR        (0x18)

    #define ENDP0_TXADDR        (0x58)

    /* EP1  */

    /* tx buffer base address */

    #define ENDP1_TXADDR        (0x100)

    #define ENDP1_RXADDR        (0x104)

    /* EP2 */

    #define ENDP2_TXADDR ENDP1_RXADDR + EPxByte //定义端点2的接收和发送地址

    #define ENDP2_RXADDR    ENDP2_TXADDR + EPxByte

    最后修改usb_prop.c,如下:

    void CustomHID_Reset(void)这个函数中添加对端口2的复位如下:

      SetEPType(ENDP2, EP_INTERRUPT);

      SetEPTxAddr(ENDP2, ENDP2_TXADDR);

      SetEPRxAddr(ENDP2, ENDP2_RXADDR);

      SetEPTxCount(ENDP2, EPxByte);

      SetEPRxCount(ENDP2, EPxByte);

      SetEPRxStatus(ENDP2, EP_RX_VALID);

      SetEPTxStatus(ENDP2, EP_TX_NAK);

    整体完成了。

    PS:USB HID例子在keil里面安装目录的Examples目录下有这个例子,是基于STM32的例子!

  • 相关阅读:
    面向对象编程思想-组合模式
    原生JS:Array对象详解
    一些XMLHttpRequest的例子代码
    详细解读XMLHttpRequest(一)同步请求和异步请求
    深入理解:JavaScript原型与继承
    轻松掌握:JavaScript状态模式
    轻松掌握:JavaScript装饰者模式
    轻松掌握:JavaScript享元模式
    轻松掌握:JavaScript模板方法模式
    回调函数的意义以及python实现
  • 原文地址:https://www.cnblogs.com/LittleTiger/p/4580159.html
Copyright © 2011-2022 走看看