stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device

这篇具有很好参考价值的文章主要介绍了stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近有个需求,需要同时用usb键盘鼠标和虚拟串口等,因为平时没怎么研究过usb协议,所以自己写复合设备一直没有成功,然后正巧在github上看到了一个stm32的一个usb复合设备库,可以快速配置usb组合设备,并且支持超级多路串口

Gihub地址https://github.com/alambe94/I-CUBE-USBD-Composite

安装

  1. 在githubr release页面下载.pack文件,要是github打不开这里有分享链接库文件
  2. CubeMX中选择管理软件包stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device
  3. 导入刚才下好的.pack文件stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device

 启用

选择组件

stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device

选择你需要的

Core是必须的,然后你需要哪些功能就需要启用,多设备一定要启用COMPISITE

我这里选择了键鼠和CDC虚拟串口,同时还得打开Core和COMPOSITE

 stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device

 在这里也需要选择你需要的

stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device

 配置其他,晶振时钟调试等等

stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device

 stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device

单独生成外设文件

stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device

可以生成工程了 

注意

MX_USB_DEVICE_Init(); 
需要手动调用这个函数对USB进行初始化

我试过默认的键盘鼠标的配置描述符好像不能适配我们的默认的习惯,键盘8个字节,鼠标4个字节的,需要改变一下,我这里贴出我的

键盘 usbd_keyboard_hid.c

__ALIGN_BEGIN static uint8_t HID_KEYBOARD_ReportDesc[HID_KEYBOARD_REPORT_DESC_SIZE] __ALIGN_END =
    {
        //-------------键盘部分报告描述符----------------
        //表示用途页为通用桌面设备
        0x05, 0x01, // USAGE_PAGE (Generic Desktop)
        0x09, 0x06, // USAGE (Keyboard)
        0xa1, 0x01, // COLLECTION (Application)
        0x05, 0x07, //   USAGE_PAGE (Keyboard)
        0x19, 0xe0, //   USAGE_MINIMUM (Keyboard LeftControl)
        0x29, 0xe7, //   USAGE_MAXIMUM (Keyboard Right GUI)
        0x15, 0x00, //   LOGICAL_MINIMUM (0)
        0x25, 0x01, //   LOGICAL_MAXIMUM (1)
        0x75, 0x01, //   REPORT_SIZE (1)
        0x95, 0x08, //   REPORT_COUNT (8)
        0x81, 0x02, //   INPUT (Data,Var,Abs)
        0x95, 0x01, //   REPORT_COUNT (1)
        0x75, 0x08, //   REPORT_SIZE (8)
        0x81, 0x03, //   INPUT (Cnst,Var,Abs)
        0x95, 0x05, //   REPORT_COUNT (5)
        0x75, 0x01, //   REPORT_SIZE (1)
        0x05, 0x08, //   USAGE_PAGE (LEDs)
        0x19, 0x01, //   USAGE_MINIMUM (Num Lock)
        0x29, 0x05, //   USAGE_MAXIMUM (Kana)
        0x91, 0x02, //   OUTPUT (Data,Var,Abs)
        0x95, 0x01, //   REPORT_COUNT (1)
        0x75, 0x03, //   REPORT_SIZE (3)
        0x91, 0x03, //   OUTPUT (Cnst,Var,Abs)
        0x95, 0x06, //   REPORT_COUNT (6)
        0x75, 0x08, //   REPORT_SIZE (8)
        0x15, 0x00, //   LOGICAL_MINIMUM (0)
        0x25, 0xFF, //   LOGICAL_MAXIMUM (255)
        0x05, 0x07, //   USAGE_PAGE (Keyboard)
        0x19, 0x00, //   USAGE_MINIMUM (Reserved (no event indicated))
        0x29, 0x65, //   USAGE_MAXIMUM (Keyboard Application)
        0x81, 0x00, //   INPUT (Data,Ary,Abs)
        0xc0};

 记得改数组长度为 63U

[特殊按键][ ][按键1][按键2][按键3][按键4][按键5][按键6]

鼠标 usbd_mouse_hid.c

__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END =
    {
         //-----------------------鼠标部分报告描述符----------------------------  
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)  
    0x09, 0x02,                    // USAGE (Mouse)  
    0xa1, 0x01,                    // COLLECTION (Application)  
    0x09, 0x01,                    //   USAGE (Pointer)  
    0x05, 0x09,                    //     USAGE_PAGE (Button)  
    0x19, 0x01,                    //     USAGE_MINIMUM (Button 1)  
    0x29, 0x03,                    //     USAGE_MAXIMUM (Button 3)  
    0x15, 0x00,                    //     LOGICAL_MINIMUM (0)  
    0x25, 0x01,                    //     LOGICAL_MAXIMUM (1)  
    0x95, 0x03,                    //     REPORT_COUNT (3)  
    0x75, 0x01,                    //     REPORT_SIZE (1)  
    0x81, 0x02,                    //     INPUT (Data,Var,Abs)  
    0x95, 0x01,                    //     REPORT_COUNT (1)  
    0x75, 0x05,                    //     REPORT_SIZE (5)  
    0x81, 0x03,                    //     INPUT (Cnst,Var,Abs)  
    0x05, 0x01,                    //     USAGE_PAGE (Generic Desktop)  
    0x09, 0x30,                    //     USAGE (X)  
    0x09, 0x31,                    //     USAGE (Y)  
    0x09, 0x38,                    //     USAGE (Wheel)  
    0x15, 0x81,                    //     LOGICAL_MINIMUM (-127)  
    0x25, 0x7f,                    //     LOGICAL_MAXIMUM (127)  
    0x75, 0x08,                    //     REPORT_SIZE (8)  
    0x95, 0x03,                    //     REPORT_COUNT (3)  
    0x81, 0x06,                    //     INPUT (Data,Var,Rel)  
    0xc0                          //   END_COLLECTION  
    };

长度49U

[按键][X][Y][滚轮]

 文章来源地址https://www.toymoban.com/news/detail-483819.html

到了这里,关于stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32 USB HID+CDC 鼠标键盘串口 组合设备配置解析

    查阅网上的博客与代码,很多都是关于USB的鼠标配置、USB的键盘配置、USB的虚拟串口配置,稍微深入一点的会将鼠标键盘合在一起,但移植起来就会报很多错误,要么是检测不到,要么是警告,这很正常,因为不理解这些数字代表着什么。但只要理解每个数字代表什么意思,

    2024年02月13日
    浏览(33)
  • 第10课【STM32 USB通讯协议实战】HID键盘+CDC虚拟串口组合设备

    文章中的部分概念可参考第9课【USB协议】USB总线 接口 端点 管道 数据包 枚举 STM32_USB-FS-Device_Lib V4.1.0 USB协议中为了提供对多样设备的支持,定义了许多外部设备子类,常见的包括: 人机交互类设备HID(Human Interface Device) 通信类设备CDC(Communicate Device Class) 大容量存储设备

    2024年02月04日
    浏览(52)
  • STM32 CubeMX USB_MSC(存储设备U盘)

    STM32 CubeMX 配置USB将STM32设置可以作为存储设备或者IAP升级功能 要注意:stm32f103c8t6内部Flash的1页为1024(1kb) 需要修改两个部分:usbd_storage_if.c文件和user_diskio.c文件 新建一个TXT文档:

    2024年02月08日
    浏览(40)
  • STM32CubeMX学习笔记(46)——USB接口使用(HID自定义设备)

    USB(Universal Serial BUS)通用串行总线 ,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在 PC 领域的接口技术。USB 接口支持设备的即插即用和热插拔功能。USB 是在 1994 年底由英特尔、康柏、IBM、Microsoft 等多家公司联合提出的。 USB 发展到现在已经有 US

    2024年02月14日
    浏览(40)
  • 【STM32开发小技巧】CUBEMX改变工程模板(FreeMarker一键生成定制文件)

    ps:可直接跳到效果展示 众所周知CUBEMX可以生成代码,图形界面可以方便用户进行STM32的配置,有天我就在想能否用户改变生成后的代码,于是就有了下面的文章。 直接进入Project Manager页面。 我们看一下官方的说明 生成了一些外设信息,这些都是通过FreeMarker模板引擎代码生成

    2023年04月08日
    浏览(62)
  • STM32 USB CDC VPC

    STM32,STM32CubeMX,HAL库,USB,虚拟串口,串口不定长接收 通过使用stm32cubemx,实现USB CDC虚拟串口,并与硬件串口进行数据传输,实现了硬件串口数据的不定长接收,以及USB虚拟串口超过64字节的数据接收,最终实现了一个简单的USB转串口功能。 使用USB的CDC类来虚拟出一个串口与电脑进

    2024年02月15日
    浏览(43)
  • 用STM32CubeMX配置输出PWM信号控制多路舵机(HAL)

    (1)编程平台:Keil5 (2)CubeMX (1)本此使用最小核心板STM32F103C8T6为例 (2)一个舵机:SG90或者MG996等均可 (3)ST-link 下载器 (4)杜邦线若干         舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度

    2023年04月09日
    浏览(32)
  • 【STM32】STM32F4中USB的CDC虚拟串口(VCP)使用方法

    最近在学习STM32的USB功能,主要是想要使用虚拟串口(VCP)功能,来解决串口传输速率较低的问题,达到于上位机高效通信的目的。 使用芯片:STM32F407ZGT6 使用函数:HAL库 使用工具:STM32CubeMX + Keil uVision5 串口工具:VOFA 主要配置内容: 调试模式为Serial; 使用外部时钟 设置为

    2024年02月21日
    浏览(64)
  • STM32CubeMX一键升级

    使用STM32CubeMX过程中会遇到检查版本更新可用却无法打勾更新的情况 解决方案是: 1.桌面右键STM32CubeMX程序 2.选择兼容性选项卡 3.勾上以管理员身份运行 问题解决

    2024年02月11日
    浏览(29)
  • STM32与USB3300共同实现USB OTG HS的CDC串口通信速度测试

      STM32和上位机传统通信方式就是串口,IIC,SPI等。IIC和SPI一般不常用,串口是用的最多的通信方式。然而串口一般用于输出调试信息这种对传输速度没要求的场景,那种大容量数据快速传输的场景,串口显得捉襟见肘。STM32自带USB FS,然而既然都使用USB了,为什么不用US

    2024年02月07日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包