STM32CubeMX 创建CustomHID设备

  • 简介
  • github
  • STM32CubeMX配置
  • 代码说明
    • 发送
    • 接收
  • 效果

简介

最近工作需求,要做个usb射频接收器,不太想用串口,每次还要选择串口号,有些电脑还需要装驱动,想来想去就不如用USB HID设备进行通讯。github里的不是纯净的Custom HID代码,还加载一些项目代码,比如串口、数据转化之类的。不过下面也会说一下怎么配置。

github

https://github.com/HaHaHaHaHaGe/custom_usbdongle

STM32CubeMX配置


因为我的芯片是STM32F042F6P6所以需要勾选图中的按钮才可以使用USB功能,否则下面USB按钮是灰色的无法开启

USB这里保持默认就好


修改图中所示位置

代码说明


编写结构体内容,可以复制

/** Usb HID report descriptor. */
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{/* USER CODE BEGIN 0 */0x06, 0xFF, 0x00,      /* USAGE_PAGE (Vendor Page: 0xFF00) */                       0x09, 0x01,            /* USAGE (Demo Kit)               */    0xa1, 0x01, /* COLLECTION (Application) */ /* 6 */ // The Input report 0x09,0x03, // USAGE ID - Vendor defined 0x15,0x00, // LOGICAL_MINIMUM (0) 0x26,0x00, 0xFF, // LOGICAL_MAXIMUM (255) 0x75,0x08, // REPORT_SIZE (8) 0x95,64, // REPORT_COUNT :SendLength 0x81,0x02, // INPUT (Data,Var,Abs) //19// The Output report 0x09,0x04, // USAGE ID - Vendor defined 0x15,0x00, // LOGICAL_MINIMUM (0) 0x26,0x00,0xFF, // LOGICAL_MAXIMUM (255) 0x75,0x08, // REPORT_SIZE (8) 0x95,64, // REPORT_COUNT:ReceiveLength 0x91,0x02, // OUTPUT (Data,Var,Abs) /* USER CODE END 0 */0xC0    /*     END_COLLECTION              */
};


修改传输包大小。0x40为64个字节(最大)

可以修改时间轮询间隔

发送

extern USBD_HandleTypeDef hUsbDeviceFS;
USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, USB_Send,64);

直接调用这个函数就可以

接收


接收需要在上图中使用一个变量标志着是否收到了数据,再使用下面的代码进行读取(记得清空标志)

uint32_t USB_GetData(uint8_t *data,uint32_t dataNum)
{uint32_t len=0;USBD_CUSTOM_HID_HandleTypeDef   *hhid;hhid = (USBD_CUSTOM_HID_HandleTypeDef*)hUsbDeviceFS.pClassData;//???????for(len=0;len<dataNum;len++){*data=hhid->Report_buf[len];data++;}return dataNum;
}

效果

配合https://blog.csdn.net/weixin_41738734/article/details/103596404的上位机可以读写HID设备

STM32CubeMX 创建CustomHID设备相关推荐

  1. STM32CUBEMX创建X-CUBE-BLE1例程

    STM32CUBEMX创建X-CUBE-BLE1例程 概述 视频教学 硬件准备 安装软件包 选择芯片型号 选择软件包 创建SensorDemo_BLESensor-App例程 管脚配置 结果演示 最后 ...

  2. ORACLE11g中创建裸设备

    1.什么是裸设备 裸设备是未经格式化.也未被挂载的磁盘分区,不能由操作系统的文件访问,而只能有应用程序自身负责如何访问裸分区,读写裸设备不会被操作系统缓存.裸设备主要用于提高I/O效率. 2.创建裸设 ...

  3. 创建字符设备的三种方法

    将创建字符设备的三种方法记录一下,以便以后参考. 1. 使用早期的register_chardev()方法 #include<linux/kernel.h> #include<lin ...

  4. linux mount 内核镜像,在Linux live system中创建loop设备并挂载镜像文件

    一般在live system中,尤其是mini live system,在制作的时候作者为了把系统容量压到最低,会把他认为不常用到的东西剔除以减少系统体重.这里要讨论的是如果你的live system ...

  5. 波形捕捉:(2)创建捕捉设备对象

    创建"捕捉设备对象"  你可以通过调用 DirectSoundCaptureCreate8 或 DirectSoundFullDuplexCreate8 函数来创建一个捕捉设备对象 ...

  6. 第二章 创建webGL设备和绘制缓冲区呈现 Context Creation and Drawing Buffer Presentation

    第二章 创建webGL设备和绘制缓冲区呈现 Context Creation and Drawing Buffer Presentation     在开始使用webGL API之前您先要从现有的HT ...

  7. 新字符设备驱动实验(自动分配设备号、自动创建应用层设备节点、新字符设备注册到内核的结构体)

    目录 自动分配和释放设备号 示例代码 新的字符设备注册到内核方法 字符设备结构体(前面的设备号也放进来) cdev_init结构体初始化函数 cdev_add 添加到linux内核 cdev_del内 ...

  8. 字符设备驱动高级篇3——自动创建字符设备驱动的设备文件

    以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 1.问题描述 使用mknod创建设备文件的缺点: 能否自动生成和删除设备文件: 2.解决方案:udev(嵌入式中用 ...

  9. 无法为立即文档创建临时文件: 设备上没有空间(centos root 目录爆满)

    qingli-bash: 无法为立即文档创建临时文件: 设备上没有空间: df 查看磁盘空间,发现根目录爆满 使用du -sh * 查看是哪个文件占用了这么大的空间,结果并没有找到大文件,那就可能是隐 ...

最新文章

  1. 关于Github(1)
  2. 基于nginx的正向代理实现
  3. 时间、时间戳相关小结 - iOS
  4. 金额与数字转化常用实用几个JS方法
  5. 【Elasticsearch】Elasticsearch mapping 映射对象
  6. java w3c解析xml乱码_下载xml 中文乱码
  7. C语言里面的 malloc 函数
  8. H248协议附加业务--遇忙前转流程
  9. centos 切换终端_centos进入不同终端的几种方法
  10. passing ‘const XXX’ as ‘this’ argument discards qualifiers
  11. python二元函数图像在线绘制_numpy,matplotlib
  12. uni-app实现本地打包安卓APK
  13. 数字记忆好方法:数字编码
  14. vue嵌入app中——首次加载慢的动画
  15. SNN、RNN、CNN
  16. 如何解决WIN11系统在安装HyperV虚拟机,网络桥接后网络上传慢的问题
  17. VB中的界面设计原则和编程技巧
  18. 机器学习服务文本翻译能力升级,中文直译模型让译文表达更地道!
  19. 正则表达式:字符串替换
  20. 8步文献综述指南——肯特大学(翻译)

热门文章

  1. circular包绘图笔记
  2. js 根据身份证获取出生日期与年龄
  3. 基于帧间频域分析的视频篡改检测
  4. 从1到N,第十二届中国IDC产业年度大典在京启幕
  5. 海通证券否认获批试点 融资融券再度忽悠券商股
  6. maven报错:Failed to execute goal on project ...: Could not resolve dependencies for project ...
  7. ros使用usb摄像头追踪ArUco markers
  8. 转-基于NodeJS的14款Web框架
  9. 蜂鸣器播放音乐 fpga实现
  10. 谷歌浏览器如何重置?谷歌浏览器恢复默认设置?