打印
[应用方案]

APM32F103 USB设备模式配置与数据收发

[复制链接]
40|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和时钟:
#include "apm32f10x.h"
#include "drv_usb_device.h"

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

#include "usbd_class_msc.h"
#include "usbd_core.h"

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

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

    // 启用USB设备
    USBD_Enable();
}

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

void MSC_BulkDataHandler(void) {
    if (USBD_ReadIntFlag(USBD_INT_CTR)) {
        // 判断传输方向
        if (USBD_ReadDir() == 0) {
            // OUT方向数据接收
            USBD_MSC_BOT_OutData(USBD_ReadEP());
        } else {
            // IN方向数据发送
            USBD_MSC_BOT_InData(USBD_ReadEP());
        }
    }
}

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

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

    // 配置USB MSC类
    USB_MSC_Config();

    while (1) {
        MSC_BulkDataHandler();
    }
}

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等)。在实际开发中,可以参考官方库文档​及本文代码示例进行扩展。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

34

帖子

0

粉丝