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

icp备案和icp许可证区别北京关键词seo

icp备案和icp许可证区别,北京关键词seo,wordpress布局切换功能,鹤壁网站设计文章目录 目的基础说明项目构建与代码调整接收发送代码与测试示例链接报告描述符总结 目的 接上篇: 《STM32 USB使用记录:HID类设备(前篇)》 USB HID 类的设备有个比较大的好处是大部分时候接入主机中都是可以免驱使用的。这篇文…

文章目录

  • 目的
  • 基础说明
  • 项目构建与代码调整
  • 接收发送代码与测试
  • 示例链接
  • 报告描述符
  • 总结

目的

接上篇: 《STM32 USB使用记录:HID类设备(前篇)》

USB HID 类的设备有个比较大的好处是大部分时候接入主机中都是可以免驱使用的。这篇文章将介绍下 STM32 中实现 USB HID 双向透传功能,结合免驱的特点,这在实际工作中是比较常用的。

基础说明

在上一篇文章中简单了解接触了下HID设备,了解了USB设备的各种描述符概念。在这篇文章追中我们要制作一个自定义的HID设备,实现双向透传功能,主要就是要调整配置描述符、端口、报告描述符等内容。

项目构建与代码调整

首先使用Cube工具来生成基础的项目,其它内容和上一篇文章一样,唯一不同的是 USB_DEVICE 这里选用 Custom Human Interface Device Class(HID) :
在这里插入图片描述

生成的项目和上篇文章中差不多:
在这里插入图片描述

因为是自定义的HID设备,所以报告描述符需要自己准备,这里修改 usbd_custom_hid_if.c 中的报告描述符实现双向透传功能:

/** Usb HID report descriptor. */
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
0x06, 0x00, 0xFF,  // Usage Page (Vendor Defined 0xFF00)
0x09, 0x00,        // Usage (0x00)
0xA1, 0x01,        // Collection (Application)
0x09, 0x01,        //   Usage (0x01)
0x15, 0x00,        //   Logical Minimum (0)
0x26, 0xFF, 0x00,  //   Logical Maximum (255)
0x75, 0x08,        //   Report Size (8)
0x95, 0x40,        //   Report Count (64)
0x81, 0x00,        //   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x02,        //   Usage (0x02)
0x15, 0x00,        //   Logical Minimum (0)
0x26, 0xFF, 0x00,  //   Logical Maximum (255)
0x75, 0x08,        //   Report Size (8)
0x95, 0x40,        //   Report Count (64)
0x91, 0x00,        //   Output (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0xC0,              // End Collection
// 34 bytes
};

然后需要修改 usbd_conf.h 中一些定义值:

/*---------- 接收缓冲区大小 -----------*/
/*---------- 对于全速设备收和发一个包最大都为64字节 -----------*/
#define USBD_CUSTOMHID_OUTREPORT_BUF_SIZE     64U
/*---------- 报告描述符长度 -----------*/
#define USBD_CUSTOM_HID_REPORT_DESC_SIZE     34U
/*---------- 端电查询时间间隔 -----------*/
/*---------- 对于全速设备该值为1表示最快可以每1ms通讯一次 -----------*/
#define CUSTOM_HID_FS_BINTERVAL     0x5U
/*---------- -----------*/

还需要修改 usbd_customhid.h 中的定义值:

// 接收一个包最大为64字节
#define CUSTOM_HID_EPIN_SIZE        0x40U
// 发送一个包最大为64字节
#define CUSTOM_HID_EPOUT_SIZE        0x40U

上面的定义值的调整也可以在Cube工具中直接进行配置。

接收发送代码与测试

usbd_custom_hid_if.c 文件中修改接收事件( OutEvent )部分代码:

uint32_t size = 0;
uint8_t buff[64];// 收到来自主机的数据时会触发该事件
static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state)
{UNUSED(event_idx);UNUSED(state);size = USBD_LL_GetRxDataSize(&hUsbDeviceFS, CUSTOM_HID_EPOUT_ADDR); // 获取收到的数据长度USBD_CUSTOM_HID_HandleTypeDef *hhid = (USBD_CUSTOM_HID_HandleTypeDef *)(hUsbDeviceFS.pClassData);for(int i=0; i<size; i++){buff[i]=hhid->Report_buf[i]; // 读取接收到的数据}USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, buff, size);// 开启下一次接收if (USBD_CUSTOM_HID_ReceivePacket(&hUsbDeviceFS) != (uint8_t)USBD_OK){return -1;}return (USBD_OK);
}

至此就可以进行测试了,这里用的工具下载地址如下:
https://pan.baidu.com/s/1i5QVmrN
在这里插入图片描述

测试时依据设备的VID和PID来分辨设备,这两个值定义在 usbd_desc.c 文件中(注意十进制和十六进制的差别):

#define USBD_VID     1155
#define USBD_PID_FS     22352

在这里插入图片描述

上面演示中接收部分代码有拷贝动作,这在高性能需求下其实是不太合适的,可以使用下面方式来处理:

uint32_t size = 0;
uint8_t buff[64]; // 接收缓冲区
static int8_t CUSTOM_HID_OutEvent_FS(uint8_t event_idx, uint8_t state)
{size = USBD_LL_GetRxDataSize(&hUsbDeviceFS, CUSTOM_HID_EPOUT_ADDR); // 获取收到的数据长度USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, buff, size); // 发送数据// 开启下一次接收,设置接收缓冲区(默认的USBD_CUSTOM_HID_ReceivePacket方法中调用的其实也是这个)USBD_LL_PrepareReceive(&hUsbDeviceFS, CUSTOM_HID_EPOUT_ADDR, buff, USBD_CUSTOMHID_OUTREPORT_BUF_SIZE);return (USBD_OK);
}

需要注意的是上面方式第一次接到数据是用的还是默认设置的缓冲区。

示例链接

仓库地址: https://github.com/NaisuXu/STM32_MCU_Examples

本示例为仓库中 USBD_HID_FS_H750

报告描述符

上面演示中用的是 USB FS ,该规范下HID一包数据最大为64Bytes,如果使用 USB HS ,那么每包最大为1024Bytes,报告描述符可以使用下这个(未测试):

0x06, 0x00, 0xFF,  // Usage Page (Vendor Defined 0xFF00)
0x09, 0x00,        // Usage (0x00)
0xA1, 0x01,        // Collection (Application)
0x09, 0x01,        //   Usage (0x01)
0x15, 0x00,        //   Logical Minimum (0)
0x26, 0xFF, 0x00,  //   Logical Maximum (255)
0x75, 0x08,        //   Report Size (8)
0x96, 0x00, 0x04,  //   Report Count (1024)
0x81, 0x00,        //   Input (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)
0x09, 0x02,        //   Usage (0x02)
0x15, 0x00,        //   Logical Minimum (0)
0x26, 0xFF, 0x00,  //   Logical Maximum (255)
0x75, 0x08,        //   Report Size (8)
0x96, 0x00, 0x04,  //   Report Count (1024)
0x91, 0x00,        //   Output (Data,Array,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
0xC0,              // End Collection
// 36 bytes

HID设备的报告描述符可以使用 HID Descriptor Tool 工具配置生成:
https://www.usb.org/document-library/hid-descriptor-tool
在这里插入图片描述

总结

总体来说 STM32 中实现 USB HID 双向透传功能并不复杂。

http://www.yidumall.com/news/37931.html

相关文章:

  • 济南平面设计公司前十名广安seo外包
  • 网站搭建系统都有哪些windows优化大师破解版
  • 网站建设合同网站建设公司重庆seo网站系统
  • 网站建设费用价格网络培训中心
  • 模板搭建网站怎么查网站是不是正规
  • 学校网站建设栏目完整的网页设计代码
  • 湖北省建设工程教育协会网站搜索引擎和浏览器
  • 3d建模软件有哪些南昌seo
  • 我贷款网站如何做小说关键词搜索器
  • 上海专业网站建夸克搜索入口
  • 深圳做商城网站建设百度商家入驻
  • 海口网站建设哪家好自动点击器怎么用
  • wordpress 关闭adminseo排名快速优化
  • 传媒网站建设价格seo高效优化
  • 做网站是干嘛哈尔滨优化网站方法
  • 做网站用那一种语言最好西安网络推广
  • .net 免备案网站空间怎么制作个人网页
  • 企业网站搜索推广现在网络推广方式
  • 价格低站长工具seo综合查询问题
  • 制作网站的公司办什么营业执照网络整合营销方案ppt
  • 一级做爰片a视频网站无代码建站
  • 网站无法发送邮件wordpress西安seo关键词推广
  • 公司网站建设升上去百度竞价排名广告
  • 义乌网站建设方案详细网址外链平台
  • 什么网站可以赚钱啊网络营销做的好的企业
  • 政府网站安全建设法律法规搜索引擎优化的对比
  • 电商网站模板免费站长工具域名查询ip
  • 薅羊毛做任务赚钱网站网站测试的内容有哪些
  • 政府机关单位网站建设怎么在百度上打广告
  • 四川高速公路建设开发集团有限公司网站推广赚钱软件