问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32F103 CubeMX 使用USB生成键盘设备

创作时间:
作者:
@小白创作中心

STM32F103 CubeMX 使用USB生成键盘设备

引用
CSDN
1.
https://m.blog.csdn.net/chen1658137632/article/details/137043447

STM32F103 CubeMX 使用USB生成键盘设备

基础信息

软件版本:

  • stm32cubmx:6.2
  • keil 5

硬件:

  • stm32F103C8T6最小系统板,如下图所示的最简原理图

HID8个数组各自的功能

生成代码

配置信息的时候,主要配置了外部时钟,debug口,USB这三个。



代码编写

添加申明信息

这部分第一个是因为要调用“usbd_hid”中的函数所以引用
另外也需要使用到usb是这个数据

/* USER CODE BEGIN Includes */
# include "usbd_hid.h"
extern USBD_HandleTypeDef hUsbDeviceFS;
/* USER CODE END Includes */

main 函数编写

这里调用函数:USBD_HID_SendReport,发送数据给电脑。
需要注意的是,如果按键松开了,则需要将按键松开的信息发送过去。否则的话会默认按键一直按下。从而产生多余的信息。

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USB_DEVICE_Init();
    uint8_t HID_Buffer[8] = {0};
    uint8_t HID_Buffer_clean[8] = {0};
  while (1)
  {
      HID_Buffer[2] = 0x04;
      HID_Buffer[3] = 0x05;
      HID_Buffer[4] = 0x06;
      HID_Buffer[5] = 0x1C;
      HID_Buffer[7] = 0x1D;
      USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer, sizeof(HID_Buffer));
      HAL_Delay(20);
      USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer_clean, sizeof(HID_Buffer_clean));
      HAL_Delay(1000);
  }
}

HID 修改

1. 修改报文描述符

下载 HID Descriptor Tool (DT) HID描述符工具:

/*修改usbd_hid.c中的报告设备描述符*/
__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END =
{
    0x05, 0x01, // USAGE_PAGE (Generic Desktop) //63
    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, 0x65, // LOGICAL_MAXIMUM (101)
    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,       // END_COLLECTION
};

2 修改 “usbd_hid.h” 中的申明文件

#include “usbd_hid.h” 文件中的申明文件,修改一下。

#define HID_MOUSE_REPORT_DESC_SIZE    63U

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号