【免费下载】 CherryUSB在RT-Thread环境下的快速开发指南

CherryUSB在RT-Thread环境下的快速开发指南

【免费下载链接】CherryUSB CherryUSB is a tiny and portable USB Stack (device & host) for embedded system with USB IP 【免费下载链接】CherryUSB 项目地址: https://gitcode.com/gh_mirrors/che/CherryUSB

前言

CherryUSB是一个轻量级的USB协议栈,专为嵌入式系统设计。本文将详细介绍如何在RT-Thread实时操作系统环境下配置和使用CherryUSB软件包,包括从机(Device)和主机(Host)两种模式的配置方法。

环境准备

在开始之前,请确保已安装以下工具:

  1. RT-Thread开发环境(env工具)
  2. 目标芯片的BSP支持包
  3. 交叉编译工具链

软件包配置

1. 通过menuconfig配置CherryUSB

在env环境中执行menuconfig命令,进入软件包管理界面,找到CherryUSB选项进行配置。

从机(Device)模式配置
  1. 启用Enable usb device mode选项
  2. 选择USB速度模式:
    • FS:全速模式(12Mbps)
    • HS:高速模式(480Mbps),需要芯片支持高速PHY
  3. 选择正确的USB设备控制器(IP)类型
  4. 选择需要使用的USB类(如HID、CDC、MSC等)
  5. 可选启用demo模板
主机(Host)模式配置
  1. 启用Enable usb host mode选项
  2. 选择USB主机控制器(IP)类型
  3. 根据需要选择类驱动
  4. 注意:MSC类默认对接RT-Thread的DFS文件系统

工程文件配置

2. 创建usb_config.h文件

从模板拷贝cherryusb_config_template.h文件到工程目录,重命名为usb_config.h,并添加以下基础配置:

#include "rtthread.h"

// 重定向打印输出
#define CONFIG_USB_PRINTF(...) rt_kprintf(__VA_ARGS__)

// 内存管理适配
#define usb_malloc(size) rt_malloc(size)
#define usb_free(ptr)    rt_free(ptr)

// 内存操作适配
#define memcpy rt_memcpy

3. 硬件初始化

根据目标芯片的USB控制器类型,需要实现底层初始化函数:

从机模式初始化示例
void OTG_HS_IRQHandler(void)
{
    extern void USBD_IRQHandler(uint8_t busid);
    USBD_IRQHandler(0);
}

int usbd_init(void)
{
    xxx_template_init(0, USB_OTG_HS_PERIPH_BASE);
    return 0;
}

INIT_APP_EXPORT(usbd_init);
主机模式初始化示例
void OTG_HS_IRQHandler(void)
{
    extern void USBH_IRQHandler(uint8_t busid);
    USBH_IRQHandler(0);
}

int usbh_init(void)
{
    usbh_initialize(0, USB_OTG_HS_PERIPH_BASE);
    return 0;
}

INIT_APP_EXPORT(usbh_init);

使用STM32CubeMX辅助配置

对于STM32系列芯片,可以使用STM32CubeMX工具生成USB初始化代码:

  1. 配置USB时钟、引脚和中断
  2. 生成代码后:
    • SystemClock_Config替换到board.c
    • HAL_PCD_MspInitHAL_HCD_MspInit中的内容复制到对应的低级初始化函数中

编译注意事项

  1. 使用MDK编译时,必须选择AC6编译器
  2. 使用GCC编译时,需要在链接脚本中添加USB类信息段:
/* section information for usbh class */
. = ALIGN(4);
__usbh_class_info_start__ = .;
KEEP(*(.usbh_class_info))
__usbh_class_info_end__ = .;

常见问题解答

Q: 如何确定芯片的USB IP类型? A: 可以参考CherryUSB的port目录下对应芯片的readme文档。

Q: 为什么MSC类不能启用demo模板? A: 因为MSC类默认对接RT-Thread的DFS文件系统,使用demo模板会导致冲突。

Q: 高速模式(HS)无法工作怎么办? A: 首先确认芯片是否内置高速PHY或外接了高速PHY芯片,其次检查时钟配置是否正确。

结语

本文详细介绍了在RT-Thread环境下配置和使用CherryUSB软件包的完整流程。通过合理的配置,开发者可以快速实现USB设备或主机功能。如果在使用过程中遇到问题,建议查阅芯片手册确认USB控制器的具体特性,并仔细检查初始化代码。

【免费下载链接】CherryUSB CherryUSB is a tiny and portable USB Stack (device & host) for embedded system with USB IP 【免费下载链接】CherryUSB 项目地址: https://gitcode.com/gh_mirrors/che/CherryUSB

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值