Initial commit

This commit is contained in:
2026-10-09 18:45:50 +08:00
commit 8feba5e015
213 changed files with 1046832 additions and 0 deletions
+91
View File
@@ -0,0 +1,91 @@
project(GD32F4xx_usb_library LANGUAGES C CXX ASM)
# GD32F4xx USB 全栈库(device/host + 各 class),默认不参与构建:
# 1. 根 CMakeLists.txt 中 add_subdirectory(SDK/GD32F4xx_usb_library) 始终执行;
# 2. 需要使用 USB 时启用开关(写入 CMakePresets 缓存或命令行):
# cmake --preset Debug -DGD32_ENABLE_USB=ON
# 3. 然后在业务目标上链接:target_link_libraries(${PROJECT_NAME} PRIVATE GD32F4xx_usb_library)
option(GD32_ENABLE_USB "Build GD32F4xx USB device/host library" OFF)
if(NOT GD32_ENABLE_USB)
return()
endif()
set(USB_SRC
# USB driver (device & host common)
driver/Source/drv_usb_core.c
driver/Source/drv_usb_dev.c
# host 专用驱动,默认 device 模式不编译(启用 host 时放开):
# driver/Source/drv_usb_host.c
# driver/Source/drv_usbh_int.c
driver/Source/drv_usbd_int.c
# USB device core
device/core/Source/usbd_core.c
device/core/Source/usbd_enum.c
device/core/Source/usbd_transc.c
# USB device classes —— 注意:class 源文件依赖例程级配置宏(各例程 usbd_conf.h
# 或专用头提供端点/包尺寸定义),模板默认只启用 CDC 虚拟串口(conf/ 的
# usbd_conf.h 取自 cdc_acm 例程,含 CDC 全部所需宏)。
# 启用其它 class 时:参考官方库 Examples/USB/USB_Device/<对应例程>/inc 下的
# usbd_conf.h,把该 class 所需宏并入 conf/usbd_conf.h,再放开对应源文件。
device/class/cdc/Source/cdc_acm_core.c
# device/class/audio/Source/audio_core.c # 需 audio 例程 conf(SPEAKER_OUT_PACKET 等)+ 板级 codec
# device/class/audio/Source/audio_out_itf.c # 板级 codec 驱动(codec_gpio_init 等)
# device/class/dfu/Source/dfu_core.c # 需 dfu 例程 conf(TRANSFER_SIZE/dfu_*_cb 等)
# device/class/dfu/Source/dfu_mem.c # DFU 存储媒介适配层(例程级实现)
# device/class/hid/Source/custom_hid_core.c # 需 custom_hid 例程 conf(CUSTOMHID_IN_EP 等)
# device/class/hid/Source/standard_hid_core.c # 需 standard_hid 例程 conf(HID_IN_PACKET 等)
# device/class/iap/Source/usb_iap_core.c # 需 iap 例程 conf + flash_operation.h
# device/class/msc/Source/usbd_msc_bbb.c # 需 msc_udisk 例程 conf(MSC_IN_EP/MEM_LUN_NUM 等)
# device/class/msc/Source/usbd_msc_core.c
# device/class/msc/Source/usbd_msc_scsi.c
# device/class/printer/Source/printer_core.c # 需 printer 例程 conf(PRINTER_IN_EP 等)
# USB host core / classes —— 默认不编译:
# conf/ 下的 usb_conf.h 目前为 device 模式(USE_DEVICE_MODE,CDC 例程基准),
# 启用 host 时需将 conf 切换为 host/dual 模式(参考官方库 Examples/USB/USB_Host
# 的 usb_conf.h + usbh_conf.h 组合,host 还依赖 USB_RX_FIFO_FS_SIZE 等 FIFO 宏),
# 再放开以下源文件并链接:
# host/core/Source/usbh_core.c
# host/core/Source/usbh_enum.c
# host/core/Source/usbh_pipe.c
# host/core/Source/usbh_transc.c
# host/class/hid/Source/usbh_hid_core.c
# host/class/hid/Source/usbh_standard_hid.c
# host/class/msc/Source/usbh_msc_bbb.c
# host/class/msc/Source/usbh_msc_core.c
# host/class/msc/Source/usbh_msc_scsi.c
# host/class/msc/Source/usbh_msc_fatfs.c # 另依赖 fat_fs(Demo Suites Utilities/Third_Party)
)
add_library(GD32F4xx_usb_library OBJECT ${USB_SRC})
target_include_directories(GD32F4xx_usb_library PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/conf
${CMAKE_CURRENT_SOURCE_DIR}/driver/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/core/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/audio/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/cdc/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/dfu/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/hid/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/iap/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/msc/Include
${CMAKE_CURRENT_SOURCE_DIR}/device/class/printer/Include
${CMAKE_CURRENT_SOURCE_DIR}/host/core/Include
${CMAKE_CURRENT_SOURCE_DIR}/host/class/hid/Include
${CMAKE_CURRENT_SOURCE_DIR}/host/class/msc/Include
${CMAKE_CURRENT_SOURCE_DIR}/ustd
${CMAKE_CURRENT_SOURCE_DIR}/ustd/common
${CMAKE_CURRENT_SOURCE_DIR}/ustd/class/cdc
${CMAKE_CURRENT_SOURCE_DIR}/ustd/class/hid
${CMAKE_CURRENT_SOURCE_DIR}/ustd/class/msc
)
target_compile_definitions(GD32F4xx_usb_library PUBLIC GD32F405)
# GD32F405 仅集成 USBFS(全速)核心;USE_USB_FS 原例程由 Keil 工程宏传入
target_compile_definitions(GD32F4xx_usb_library PUBLIC USE_USB_FS)
# USB 库依赖标准外设库(RCU/GPIO 等)
target_link_libraries(GD32F4xx_usb_library PUBLIC CMSIS GD32F4xx_standard_peripheral)