当前位置: 首页 > news >正文

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

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • CentOS开启FTP及配置用户
  • IOS 打开相机和相册的方法
  • DirectSound应用
  • C语言及程序设计进阶例程-25 排序问题及其求解
  • ThinkPhp学习09
  • TCP/IP详解学习笔记(6)-UDP协议
  • Kotlin:Android世界的Swift
  • js检测是否手机浏览的函数
  • 浅谈数据结构-二叉树
  • SharePoint 2013 开发——APP开发的考虑和建议
  • LAMP环境搭建
  • 设置共享实验
  • 基线MRI与CRP是依那西普对nr-axSpA的疗效预测因素
  • 硬盘分区后丢失的文件怎么恢复
  • HEVC/H.265 的未来必须是使用并行处理(OpenCL?) OpenCV和OpenCL区别
  • 2019年如何成为全栈工程师?
  • Babel配置的不完全指南
  • CSS 提示工具(Tooltip)
  • css选择器
  • C学习-枚举(九)
  • flutter的key在widget list的作用以及必要性
  • Java程序员幽默爆笑锦集
  • 测试如何在敏捷团队中工作?
  • 浮动相关
  • 坑!为什么View.startAnimation不起作用?
  • 模型微调
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用Gradle第一次构建Java程序
  • 我与Jetbrains的这些年
  • C# - 为值类型重定义相等性
  • 阿里云ACE认证之理解CDN技术
  • 容器镜像
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​flutter 代码混淆
  • #07【面试问题整理】嵌入式软件工程师
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (SERIES12)DM性能优化
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)Thymeleaf用法——Thymeleaf简介
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .gitignore文件—git忽略文件
  • .NET 设计一套高性能的弱事件机制
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .net访问oracle数据库性能问题
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .pop ----remove 删除
  • @Autowired注解的实现原理
  • @JsonFormat与@DateTimeFormat注解的使用
  • [ C++ ] STL---string类的使用指南
  • [240607] Jina AI 发布多模态嵌入模型 | PHP 曝新漏洞 | TypeScript 5.5 RC 发布公告
  • [AIGC] 深入浅出 Python中的`enumerate`函数