STM32创建HID项目(一)

好了,这几天终于又开始闲下来了,继续那个键盘的项目吧,上次把键盘那边的电路设计了一下,不过,我决定改版一下,一个是无线芯片换了一下,再一个,通过了解键盘的相关协议,发现也没那么复杂,所以回头再改吧,这篇呢,先说一下如何用stm32来实现一个HID协议的键盘。

HID(Human Interface Device)是一个人机接口实现,现在的操作系统都支持HID,这使得,我们只需要根据HID的协议,我们自己指定自己的设备是什么东西,操作系统就可以把我们的设备当作什么设备进行处理,而且有个好处,不需要驱动,这样的话,真正做到直插直用。

大多数STM32的芯片都包含了一个USB接口,可以通过配置,实现创建HID设备,配置的过程可以使用CubeMX还是很方便的。本文主要参考两个文档。

https://blog.csdn.net/zhanglifu3601881/article/details/89675307

https://blog.csdn.net/hecumt/article/details/103906632

本文基于stm32f103c8t6芯片,回头会换到stm32f070f6p6(便宜。。。。。)

一、创建项目

image.png

image.png

image.png

image.png

image.png

image.png

image.png

二、修改代码

经过第一步的配置,生成的代码是可以直接运行了的,只不过此时,操作系统(win10)仍无法识别是什么设备,因为此时我们并没有指定自己的设备是什么设备,所以需要进一步进行代码修改。

image.png

/** 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 */
//  0x00,

    0x05, 0x01,
    0x09, 0x06,
    0xa1, 0x01,
    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, 0x80,         //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)
    
  /* USER CODE END 0 */
  0xC0    /*     END_COLLECTION              */
};

image.png

image.png

三、编译烧录

这个都懂的吧。。。

四、查看结果

image.pngimage.png

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值