USB协议学习笔记 - HID 设备

前言

  • 为了尽快的熟悉USB的使用,我没有通读USB2.0的规格书,这是初步的了解的USB协议的各个描述符
  • 学习新技术,要先有个感官的认识,再深入学习,或许也是一种好的方法
  • 这里先学习USB HID设备(类似于鼠标),对USB设备的工作有个感觉

平台搭建

  • 硬件开发板:基于STM32L475

  • 使用STM32CubeMX快速搭建一个USB的HID 设备环境

  • 首先打开:STM32CubeMX,选择:STM32L475VE
    在这里插入图片描述

  • 选择USB_OTG_FS,注意这里的FS 应该是:Full Speed,全速的意思,而不是File System,文件系统)
    在这里插入图片描述

  • 开启USB的协议栈(中间件),类似于USB Core
    在这里插入图片描述

  • 需要配置系统的时钟、USB的时钟(48MHz)
    在这里插入图片描述

  • 设置好工程名字、这里生成Keil MDK5工程
    在这里插入图片描述

工程验证

  • 使用Keil MDK5 打开工程,编译下载,发现,电脑枚举USB HID设备成功

在这里插入图片描述

  • 自动生成的工程,USB HID设备成功枚举了,没事干了?或者说用户接下来能干点什么?
  • 经过查看工程USB HID相关的代码,发现用户代码不好加啊,不清楚用户的程序在那里写
  • 经过参考ST官方的USB HID例程,经过简单的修改,最终可以干一点事情了

让鼠标指针【飞】

  • 原来USB HID设备,提供了一个接口:USBD_HID_SendReport,用于上报鼠标或摇杆的坐标,从而可以控制电脑的鼠标指针
  • 这里简单的整理下:main.c的函数
  • 发送一个改变的鼠标坐标给USB主机(电脑)
#include "main.h"
#include "usb_device.h"
#include "usbd_hid.h"

void SystemClock_Config(void);
static void MX_GPIO_Init(void);

extern USBD_HandleTypeDef hUsbDeviceFS;

int main(void)
{
    uint8_t HID_Buffer[4] = { 0 };
    uint8_t pos = 0;

    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USB_DEVICE_Init();

    while (1)
    {
        HAL_Delay(500);
        HID_Buffer[1] = pos;
        HID_Buffer[2] = pos+1;
        pos++;
        USBD_HID_SendReport(&hUsbDeviceFS, HID_Buffer, 4);
    }
}
  • 验证效果发现,开发板接入枚举成功后,鼠标自己自动移动。。。

小结

  • 这里【跳】过了一些【USB各种描述符】的配置,因为想【走马观花】,先大概走个流程,再深入细节
  • 初步了解了USB 设备:HID设备的操作,发现使用ST的代码生成IDESTM32CubeMX,简单的不得了
  • 当然也发现,这个标准HID设备,只能上报【鼠标坐标】?不能实现双向通信?
  • 接下来,就要研究:【CUSTOM HID 设备】,用户可以用来双向通信的 USB设备

版权声明:本文为CSDN博主「张世争」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tcjy1000/article/details/122781213

生成海报
点赞 0

张世争

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

USB协议学习笔记 - HID 设备

前言 为了尽快的熟悉USB的使用,我没有通读USB2.0的规格书,这是初步的了解的USB协议的各个描述符学习新技术,要先有个感官的认识,再深入学习,或许也是一种好的方法这里

USB协议学习笔记 - CUSTOM HID 设备

简介 这里使用STM32平台进行USB 协议的学习与USB 设备的调试开发USB HID设备,协议较固定,无法实现数据的自由接收与发送USB CUSTOM HID设备(自定义HID协议)

USB协议学习笔记 - 引言

概述 最近想基于STM32做个USB设备,但是搜索了下USB相关的技术资料比较少,并且USB相关的书籍也是比较的少,所以打算系统的学习下USB协议相关的技术。USB 的官方网站:http