完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前言 本文简单介绍如何应用ST USB HID(MOUSE)例程生成一个可以输入和输出任何长度小于等于64字节的移植过程。 问题描述: HID的在USB的运用中是非常广泛的,但是很多应用并不是简单的鼠标或者键盘操作,而是客户自定义的一些应用,所以REPORT的定义往往跟鼠标或者键盘并不相同,因而客户常常基于ST的HID的例程进行修改。那么如何基于我们的例程生成一个可以输入输出任何长度小于等于64字节的例程?这里示范一下,抛砖引玉。 代码修改: 第一步: 我们在u***d_hid_core.c中,找到配置描述进行修改。首先增加一个OUT 端点。同时将HID_IN_PACKET 和HID_OUT_PACKET长度修改为0x40。 0x07, /* bLength: Endpoint Descriptorsize *///dum USB_ENDPOINT_DESCRIPTOR_TYPE, /*bDescriptorType: */ /* Endpoint descriptor type */ HID_OUT_EP, /* bEndpointAddress: */ /*Endpoint Address (OUT) */ 0x03, /* bmAttributes: Interruptendpoint */ HID_OUT_PACKET, /* wMaxPacketSize: 64Bytes max */ 0x00, 0x01, /* bInterval: Polling Interval(20 ms) */ /* 41 */ 第二步: 修改报告描述符:请注意这两个report count 和report SIZE 的设定。 const uint8_tHID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] = { 0x05, 0x8C, /* USAGE_PAGE (VendorPage: 0xFF00) */ 0x09, 0x06, /* USAGE (Demo Kit) */ 0xa1, 0x01, /* COLLECtiON(Application) */ /* 6 */ 0x09, 0x06, /* USAGE (LED 1) */ 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ 0x26, 0x00,0xff, /* LOGICAL_MAXIMUM(1) */ 0x75, 0x08, /* REPORT_SIZE (8) */ 0x95, 0x40, /* REPORT_COUNT (64) */ 0x91, 0x82, /* OUTPUT(Data,Var,Abs,Vol) */ /* 18 */ 0x09, 0x06, /* USAGE (ADC IN) */ 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ 0x26, 0x00,0xff, /* LOGICAL_MAXIMUM(255) */ 0x75, 0x08, /* REPORT_SIZE (8) */ 0x95, 0X40, /* REPORT_COUNT (64) */ 0x81, 0x82, /* INPUT(Data,Var,Abs,Vol) */ /* 31 */ 0xc0 /* END_COLLECTION */ }; /* CustomHID_ReportDescriptor */ 第三步: 修改HID CLASS 初始化代码: 注意这里两个地方: 1, USB FIFO的分配定义。 2, U*** ENDPOINT的使能,以及准备接收数据。 static uint8_t USBD_HID_Init (void*pdev, uint8_t cfgidx) { DCD_PMA_Config(pdev ,HID_IN_EP,USB_SNG_BUF,HID_IN_TX_ADDRESS); DCD_PMA_Config(pdev ,HID_OUT_EP,USB_SNG_BUF,HID_OUT_RX_ADDRESS); /* Open EP IN */ DCD_EP_Open(pdev, HID_IN_EP, HID_IN_PACKET, USB_EP_INT); /* Open EP OUT */ DCD_EP_Open(pdev, HID_OUT_EP, HID_OUT_PACKET, USB_EP_INT); DCD_EP_PrepareRx(pdev,HID_OUT_EP,Report_buf,HID_OUT_PACKET); PrevXferDone=1; return USBD_OK; } 第四步: 修改发送函数,注意不能一直往USB FIFO里面填充数据,一定要等上一次传输完成再填充。 USBD_HID_SendReport(&USB_Device_dev, Send_Buffer,HID_IN_PACKET); 最后我们一起来看看效果,可以清楚的看到MCU每毫秒都会发送64个字节的数据到主机。 |
|
相关推荐
|
|
imx6ull裸机编程,使用宏定义无法驱动,使用指针就可以驱动
227 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第三十二章 音频FFT实验
186 浏览 0 评论
飞凌嵌入式ElfBoard EL 1板卡-i2c与从设备通讯编程示例之i2c-tools工具使用
1243 浏览 0 评论
stc15f2k60s2利用串口传输字模存储到eeprom并进行点阵显示
1567 浏览 1 评论
1540 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11607 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 05:33 , Processed in 0.543423 second(s), Total 63, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号