[应用方案] APM32F103 USB设备模式配置与数据收发

[复制链接]
913|0
 楼主| a976209770 发表于 2024-12-25 00:02 | 显示全部楼层 |阅读模式
本文将介绍APM32F103的USB设备模式,包括控制传输(Control)、批量传输(Bulk)、中断传输(Interrupt)和同步传输(Isochronous)的区别,并以Mass Storage Class(MSC)为例进行详细配置和实现。

1. USB设备模式的四种类型

  • 控制传输(Control):适用于初始化阶段的数据传输,如设备描述符和配置描述符。
  • 批量传输(Bulk):常用于大数据传输,适配块设备(如MSC)的读写。
  • 中断传输(Interrupt):周期性数据传输,适合键盘、鼠标等设备。
  • 同步传输(Isochronous):主要用于实时数据,如音频和视频流。

2. MSC示例:配置与实现

2.1 硬件初始化配置USB GPIO和时钟:
  1. #include "apm32f10x.h"
  2. #include "drv_usb_device.h"

  3. void USB_Init(void) {
  4.     // 启用USB时钟
  5.     RCM_EnableAHBPeriphClock(RCM_AHB_PERIPH_USB);
  6.    
  7.     // 配置USB引脚为功能模式
  8.     GPIO_Config_T gpioConfig;
  9.     gpioConfig.pin = GPIO_PIN_11 | GPIO_PIN_12; // USB D+ 和 D-
  10.     gpioConfig.mode = GPIO_MODE_AF_PP;
  11.     gpioConfig.speed = GPIO_SPEED_50MHz;
  12.     GPIO_Config(GPIOA, &gpioConfig);
  13. }
2.2 配置MSC类初始化MSC类并注册协议处理函数:

  1. #include "usbd_class_msc.h"
  2. #include "usbd_core.h"

  3. void USB_MSC_Config(void) {
  4.     // 初始化USB设备核心
  5.     USBD_Init();

  6.     // 注册MSC类处理函数
  7.     USBD_RegisterClassHandler(&USBD_MSC_ClassHandler);

  8.     // 启用USB设备
  9.     USBD_Enable();
  10. }

2.3 数据收发实现批量传输实现:

  1. void MSC_BulkDataHandler(void) {
  2.     if (USBD_ReadIntFlag(USBD_INT_CTR)) {
  3.         // 判断传输方向
  4.         if (USBD_ReadDir() == 0) {
  5.             // OUT方向数据接收
  6.             USBD_MSC_BOT_OutData(USBD_ReadEP());
  7.         } else {
  8.             // IN方向数据发送
  9.             USBD_MSC_BOT_InData(USBD_ReadEP());
  10.         }
  11.     }
  12. }

2.4 主程序入口在主函数中调用初始化和配置函数:

  1. int main(void) {
  2.     // 初始化系统时钟和USB硬件
  3.     SystemInit();
  4.     USB_Init();

  5.     // 配置USB MSC类
  6.     USB_MSC_Config();

  7.     while (1) {
  8.         MSC_BulkDataHandler();
  9.     }
  10. }

3. MSC传输流程图




4. USB设备模式的其他应用场景

除了MSC(大容量存储类),APM32F103的USB设备模式还支持其他常见设备类,以下是几个典型的应用场景及其实现思路:
4.1 HID(Human Interface Device,人体接口设备)HID类适用于键盘、鼠标或游戏手柄等设备。其传输方式主要基于中断传输。
  • 端点配置:通常配置一个IN端点用于向主机发送数据。
  • 协议处理:需要实现标准的HID描述符和报告格式,具体内容可以参考USB HID规范。
4.2 CDC(Communication Device Class,通信设备类)CDC类主要用于虚拟串口通信,通过USB接口模拟传统的UART通信。
  • 端点配置:需要配置一个控制端点(用于管理)、一个IN端点(数据发送)和一个OUT端点(数据接收)。
  • 实现功能
    • 主机通过控制端点发送波特率和数据格式等配置指令。
    • 数据通过批量传输端点实现双向通信。
4.3 Audio(音频设备)Audio类适用于麦克风、耳机或扬声器等音频设备。它采用同步传输来保证音频数据的实时性。
  • 端点配置:一个IN端点(用于音频采集数据)或OUT端点(用于播放音频数据)。
  • 音频流处理:需要配置固定的采样率和数据帧大小,并根据主机的反馈调整同步机制。

5. 结语
通过本文的示例和说明,用户可以快速实现基于APM32F103的USB设备模式开发,并了解如何根据实际需求选择合适的设备类(MSC、HID、CDC、Audio等)。在实际开发中,可以参考官方库文档​及本文代码示例进行扩展。


您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

43

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部