STM32CubeMX 创建CustomHID设备
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设备相关推荐
- STM32CUBEMX创建X-CUBE-BLE1例程
STM32CUBEMX创建X-CUBE-BLE1例程 概述 视频教学 硬件准备 安装软件包 选择芯片型号 选择软件包 创建SensorDemo_BLESensor-App例程 管脚配置 结果演示 最后 ...
- ORACLE11g中创建裸设备
1.什么是裸设备 裸设备是未经格式化.也未被挂载的磁盘分区,不能由操作系统的文件访问,而只能有应用程序自身负责如何访问裸分区,读写裸设备不会被操作系统缓存.裸设备主要用于提高I/O效率. 2.创建裸设 ...
- 创建字符设备的三种方法
将创建字符设备的三种方法记录一下,以便以后参考. 1. 使用早期的register_chardev()方法 #include<linux/kernel.h> #include<lin ...
- linux mount 内核镜像,在Linux live system中创建loop设备并挂载镜像文件
一般在live system中,尤其是mini live system,在制作的时候作者为了把系统容量压到最低,会把他认为不常用到的东西剔除以减少系统体重.这里要讨论的是如果你的live system ...
- 波形捕捉:(2)创建捕捉设备对象
创建"捕捉设备对象" 你可以通过调用 DirectSoundCaptureCreate8 或 DirectSoundFullDuplexCreate8 函数来创建一个捕捉设备对象 ...
- 第二章 创建webGL设备和绘制缓冲区呈现 Context Creation and Drawing Buffer Presentation
第二章 创建webGL设备和绘制缓冲区呈现 Context Creation and Drawing Buffer Presentation 在开始使用webGL API之前您先要从现有的HT ...
- 新字符设备驱动实验(自动分配设备号、自动创建应用层设备节点、新字符设备注册到内核的结构体)
目录 自动分配和释放设备号 示例代码 新的字符设备注册到内核方法 字符设备结构体(前面的设备号也放进来) cdev_init结构体初始化函数 cdev_add 添加到linux内核 cdev_del内 ...
- 字符设备驱动高级篇3——自动创建字符设备驱动的设备文件
以下内容源于朱有鹏<物联网大讲堂>课程的学习整理,如有侵权,请告知删除. 1.问题描述 使用mknod创建设备文件的缺点: 能否自动生成和删除设备文件: 2.解决方案:udev(嵌入式中用 ...
- 无法为立即文档创建临时文件: 设备上没有空间(centos root 目录爆满)
qingli-bash: 无法为立即文档创建临时文件: 设备上没有空间: df 查看磁盘空间,发现根目录爆满 使用du -sh * 查看是哪个文件占用了这么大的空间,结果并没有找到大文件,那就可能是隐 ...
最新文章
- 关于Github(1)
- 基于nginx的正向代理实现
- 时间、时间戳相关小结 - iOS
- 金额与数字转化常用实用几个JS方法
- 【Elasticsearch】Elasticsearch mapping 映射对象
- java w3c解析xml乱码_下载xml 中文乱码
- C语言里面的 malloc 函数
- H248协议附加业务--遇忙前转流程
- centos 切换终端_centos进入不同终端的几种方法
- passing ‘const XXX’ as ‘this’ argument discards qualifiers
- python二元函数图像在线绘制_numpy,matplotlib
- uni-app实现本地打包安卓APK
- 数字记忆好方法:数字编码
- vue嵌入app中——首次加载慢的动画
- SNN、RNN、CNN
- 如何解决WIN11系统在安装HyperV虚拟机,网络桥接后网络上传慢的问题
- VB中的界面设计原则和编程技巧
- 机器学习服务文本翻译能力升级,中文直译模型让译文表达更地道!
- 正则表达式:字符串替换
- 8步文献综述指南——肯特大学(翻译)
热门文章
- circular包绘图笔记
- js 根据身份证获取出生日期与年龄
- 基于帧间频域分析的视频篡改检测
- 从1到N,第十二届中国IDC产业年度大典在京启幕
- 海通证券否认获批试点 融资融券再度忽悠券商股
- maven报错:Failed to execute goal on project ...: Could not resolve dependencies for project ...
- ros使用usb摄像头追踪ArUco markers
- 转-基于NodeJS的14款Web框架
- 蜂鸣器播放音乐 fpga实现
- 谷歌浏览器如何重置?谷歌浏览器恢复默认设置?