源: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的例子!

USB那点事3 -使用端口2作为custom HID的传输(转)的更多相关文章

  1. STM32 USB开发(三) 基于F105RBT6核心板开发的自定义HID收发(FS)

    硬件设计 该核心板的USB插口有两个,一个是用于USB Slave的,可以用来做HID设备,把模拟STM32模拟为U盘等:另一个是USB Host设备,可以对插上的U盘的数据进行读写. 图中J2是Mi ...

  2. STM32-USB那点事

    STM32 USB那点事1 USB那点事2 - Custom HID例子程序解疑 USB那点事3 -使用端口2作为custom HID的传输 USB那点事5之USB通信出错 USB那点事6传输要素 S ...

  3. CentOS查看你是否有USB 3.0端口

    近来的大多数的新计算机都有了USB 3.0接口了.但是你怎么知道你的计算机有没有USB 3.0接口?这篇短文中,我们会告诉如何在Linux下知道你的系统上有USB 3还是USB3接口. 在Linux终 ...

  4. Ubuntu usb设备端口号绑定

    1.将串口设备插入USB口,通过lsusb查看端口信息.例如: ID 1a86:7523 表示usb设备的ID(这个ID由芯片制造商设置,可以唯一表示该设备) 1a86 usb_device_desc ...

  5. MA8621带SD读卡的USB 2.0高速3端口HUB方案芯片|MA8621中文规格书|USB 2.0方案

    MA8621说明 MA8621是USB 2.0高速3端口集线器的高性能解决方案,带有SD卡控制器,完全符合通用串行总线规范2.0.控制器继承了先进的串行接口技术,当3个DS(下游)端口同时工作时,功耗 ...

  6. USB详解

    USB作为一种串行接口,应用日益广泛.如同每个工程设计人员必须掌握I2C,RS232这些接口一样,我们也必须掌握USB.但是USB的接口协议实在有点费解,Linux UCHI驱动作者之一Alan St ...

  7. 修改USB固件库的Customer_HID例程

    我用的是神州三号开发板子,板子的USB模块原理图为: 配置端口G的11号引脚为usb的使能引脚,按理来说应该是开漏输出的(看了很多的修改代码都是这个模式),不过就是不能使能usb,只能配置成推挽的才行 ...

  8. Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platform)

    catalog . 引言 . Windows 2000网络结构和OSI模型 . NDIS驱动 . NDIS微端口驱动编程实例 . NDIS中间层驱动编程实例 . NDIS协议层驱动编程实例 . TDI ...

  9. usb驱动开发11之设备生命线

    暂时先告别媒人,我们去分析各自的生命旅程,最后还会回到usb_device_match函数. 首先当你将usb设备连接在hub的某个端口上,hub检测到有设备连接了进来,它会为设备分配一个struct ...

随机推荐

  1. js框架——angular.js(2)

    1. 模块的利用扩充 模块的名称也可以当做变量使用,例如: <body ng-app> <label><input type="checkbox" n ...

  2. POJ 2635 The Embarrassed Cryptographer(大数求余)

    题意:给出一个大数,这个大数由两个素数相乘得到,让我们判断是否其中一个素数比L要小,如果两个都小,输出较小的那个. 分析:大数求余的方法:针对题目中的样例,143 11,我们可以这样算,1 % 11 ...

  3. cocos2d-x 3.x 橡皮擦功能

    1.HelloWorldScene.h cocos2d::DrawNode* _eraser; cocos2d::RenderTexture*_renderTexture; 2.HelloWorldS ...

  4. Magento首页显示产品

    Magento首页显示产品     经常用的比较琐碎,上官网发现一个稍微全一点的不过没有针对 具体使用过程中遇到的情况进行修正  这边只做一个备忘吧   (细节问题 按个别情况进行修改即可) New  ...

  5. 将项目同时托管到Github和Git@OSC

    http://my.oschina.net/GIIoOS/blog/404555?fromerr=KHvn8UKH 摘要 Github是最大的git代码托管平台,​GIT@OSC是国内最大的git代码 ...

  6. 【转载】区间DP

    http://www.cnblogs.com/zsboy/archive/2013/03/08/2950261.html 博客园 首页 新随笔 联系 订阅 管理 定义区间DP   区间动态规划问题一般 ...

  7. 几种在shell命令行中过滤adb logcat输出的方法

    我们在Android开发中总能看到程序的log日志内容充满了屏幕,而真正对开发者有意义的信息被淹没在洪流之中,让开发者无所适从,严重影响开发效率.本文就具体介绍几种在shell命令行中过滤adblog ...

  8. HQL中左连接,右连接,内连接

    左连接:left join 如A left join B 即取出A表的所有数据,由on条件关联的B表数据,有则显示,没有则为空: 右连接:right join 如 A right join B 即取出 ...

  9. UIApplication 用法解析

    UIApplication,代表的是整个应用做的事,因此每个程序只能有一个,系统使用的是单例模式,就是上面的[UIApplication sharedApplication]来得到一个实例.这个单例实 ...

  10. Go语言实现列出排列组合

    今天,隔壁坐的小朋友给我一串数字: 1 6 21 55 让我观察规律,然后帮他推导公式. 尼玛,当我是神呢?!! 想了半天没看出个原委, 于是看了他那边具体需要才发现他那边是对N个数字进行5个数字的组 ...