USB那点事3 -使用端口2作为custom HID的传输
2013-01-24 14:50
260 查看
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的例子!
首先修改: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的例子!
相关文章推荐
- USB那点事3 -使用端口2作为custom HID的传输(转)
- 使用LabVIEW开发STM32 USB HID驱动和上位机软件成功
- 【网络通信】服务器端Socket监听80端口,建立连接传输数据时也是使用的80端口么?
- android设备使用usb串口传输数据
- STM32例程之USB HID双向数据传输
- EZ-USB 68013学习笔记--CYAPI的使用之批量传输方式
- 文件批量传输组件作为架包使用说明
- 使用USB HID进行数据交互
- 使用LabVIEW开发STM32 USB HID驱动和上位机软件成功
- STM32F103C8T6使用MDK 4.12中Custom_HID的修改方法
- STM32例程之USB HID双向数据传输
- STM32_USB-FS-Device_Lib_V4.0.0中CustomHID实例在STM3210E-EVAL上的实现
- stm32 USB hid设备与PC进行双向数据传输时PC不识别USB设备
- 使用OllyDbg 分析 USB HID 设备接口协议
- USB HID通讯的例子,VB.net下使用
- 关于Android设备USBHID通信控制传输相关接口说明
- openfire 使用已有的数据库作为用户认证数据库 Custom Database Integration Guide
- 使用OkHttp作为Volley的传输
- STM32 JTAG端口作为普通I/O口使用的方法
- 【iCore1S 双核心板_ARM】例程十五:USB_HID实验——双向数据传输