10分钟掌握CherryUSB设备开发:从CDC到HID的完整示例教程

【免费下载链接】CherryUSB CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统(带 USB IP)的高性能 USB 主从协议栈 【免费下载链接】CherryUSB 项目地址: https://gitcode.com/cherry-embedded/CherryUSB

CherryUSB是一个小而美的、可移植性高的、用于嵌入式系统(带USB IP)的高性能USB主从协议栈。本教程将带你快速掌握CherryUSB设备开发,从基础的CDC(通信设备类)到常用的HID(人机接口设备),通过实际示例了解如何在嵌入式系统中轻松实现USB功能。

CherryUSB架构概览

CherryUSB采用分层架构设计,分为设备控制器驱动、USB核心层、设备类驱动和操作系统抽象层,支持多种USB设备类和主机控制器。

CherryUSB架构图

核心功能特点

  • 多设备类支持:包括CDC、HID、MSC、Audio、Video等常见USB设备类
  • 跨平台兼容:支持STM32、ESP32、CH32等多种嵌入式平台
  • 高性能:优化的USB数据传输机制,支持高速USB 2.0
  • 易移植:清晰的代码结构和硬件抽象层设计

快速开始:环境搭建

1. 获取源码

git clone https://gitcode.com/cherry-embedded/CherryUSB

2. 安装组件(以ESP32为例)

CherryUSB已集成到ESP-IDF组件管理器,可直接在ESP Registry中搜索安装。

ESP组件管理器中的CherryUSB

3. 硬件配置

以STM32为例,需要配置USB引脚和时钟:

STM32 USB硬件初始化代码

CDC设备开发:创建虚拟串口

CDC(通信设备类)是最常用的USB设备类之一,可实现虚拟串口功能。

1. 选择CDC模板

在CherryUSB的demo目录中提供了CDC ACM模板:

CDC ACM模板

2. 核心代码实现

// 初始化USB设备
usbd_desc_register(&usbd_cdc_acm_desc);
usbd_add_interface(&cdc_acm_intf);
usbd_initialize();

// 数据发送
uint8_t data[] = "Hello CherryUSB!";
usbd_ep_write(CDC_ACM_IN_EP, data, sizeof(data));

3. 测试效果

编译烧录后,电脑会识别到一个虚拟串口,通过串口助手可接收设备发送的数据。

HID设备开发:实现自定义输入设备

HID(人机接口设备)适用于键盘、鼠标、游戏手柄等输入设备。

1. HID设备配置

CherryUSB提供了多种HID模板,包括键盘、鼠标和自定义HID设备:

HID模板目录

2. 报告描述符定义

HID设备需要定义报告描述符来描述设备功能:

static const uint8_t hid_report_desc[] = {
    0x05, 0x01,        // USAGE_PAGE (Generic Desktop)
    0x09, 0x02,        // USAGE (Mouse)
    0xA1, 0x01,        // COLLECTION (Application)
    // ... 报告描述符内容 ...
    0xC0                // END_COLLECTION
};

3. 数据上报

// 鼠标移动示例
uint8_t mouse_report[4] = {0x00, dx, dy, 0x00};
usbd_ep_write(HID_IN_EP, mouse_report, sizeof(mouse_report));

高级示例:多设备复合

CherryUSB支持多设备复合功能,可同时实现多个USB设备类。

1. 复合设备配置

CDC+MSC+HID复合设备模板

2. 配置菜单

通过配置工具选择需要启用的设备类:

设备配置菜单

性能测试

MSC设备速度测试

使用CrystalDiskMark测试USB Mass Storage设备的读写速度:

MSC设备速度测试

RNDIS网络性能

CherryUSB的RNDIS设备可实现网络连接,测试网速可达100Mbps以上:

RNDIS网络速度测试

总结

通过本教程,你已经了解了CherryUSB的基本架构和设备开发流程。从简单的CDC虚拟串口到复杂的复合设备,CherryUSB提供了丰富的示例和灵活的API,帮助你快速实现各种USB设备功能。

更多详细文档和示例可参考项目中的官方文档:

官方文档目录

现在就开始你的CherryUSB开发之旅吧!只需10分钟,即可让你的嵌入式设备拥有强大的USB功能。

【免费下载链接】CherryUSB CherryUSB 是一个小而美的、可移植性高的、用于嵌入式系统(带 USB IP)的高性能 USB 主从协议栈 【免费下载链接】CherryUSB 项目地址: https://gitcode.com/cherry-embedded/CherryUSB

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐