基于 STM32F103C8T6 的 USB 接口测试程序
通过以上步骤,可快速验证 STM32F103C8T6 的 USB 接口功能。如需完整代码或进一步调试,请参考 STM32CubeMX 生成的示例工程。的 USB 接口测试程序开发指南,以。
·
以下是基于 STM32F103C8T6 的 USB 接口测试程序开发指南,以 USB虚拟串口(CDC) 为例:
—
1. 硬件准备
- STM32F103C8T6 开发板(需支持 USB,如 Blue Pill 核心板)。
- USB接口:连接
PA11 (D-)和PA12 (D+)到 USB 插座的 D-/D+。 - 外部晶振:确保使用 8MHz 外部晶振(USB 需精确的 48MHz 时钟)。
—
2. 开发环境配置
- IDE:Keil MDK、STM32CubeIDE 或 PlatformIO。
- 库支持:STM32CubeMX + HAL 库(推荐)。
3. 使用 STM32CubeMX 配置 USB
-
时钟配置:
- HSE:8MHz 外部晶振。
- PLL 配置:HSE → PLL ×9 → 72MHz 系统时钟。
- USB 时钟:从 PLL 分频得到 48MHz(需精确)。
-
USB 外设配置:
- 启用 USB Device 模式,选择 CDC (Virtual COM Port)。
- 自动生成描述符文件(
usbd_cdc.c/h)。
-
生成代码:
- 生成初始化代码并导入到 IDE。
4. 关键代码实现
4.1 USB 初始化(main.c)
#include "usbd_cdc.h"
USBD_HandleTypeDef husb; // USB 设备句柄
int main(void) {
HAL_Init();
SystemClock_Config(); // 确保时钟配置正确(包含 USB 48MHz)
MX_USB_DEVICE_Init(); // 初始化 USB CDC
while (1) {
// 主循环(USB 中断驱动)
}
}
4.2 发送数据到 PC(示例)
void USB_SendData(uint8_t *data, uint16_t len) {
CDC_Transmit_FS(data, len); // 通过 USB CDC 发送数据
}
// 示例:发送字符串
USB_SendData((uint8_t*)"Hello USB!\n", 11);
4.3 接收 PC 数据(回调函数)
// 在 `usbd_cdc_if.c` 中实现接收回调
static int8_t CDC_Receive_FS(uint8_t* buf, uint32_t len) {
// 处理接收到的数据(如回显)
CDC_Transmit_FS(buf, len);
return USBD_OK;
}
5. 测试步骤
- 编译并烧录程序。
- 连接 USB:通过 USB 线将开发板连接到 PC。
- 确保
PA11 (D-)和PA12 (D+)正确连接。
- 确保
- 驱动安装:
- PC 将识别为 虚拟串口(如未自动安装,需手动安装 STM32 CDC 驱动)。
- 串口调试:
- 使用 PuTTY 或 串口助手 打开虚拟串口(波特率可任意设置,CDC 协议自适应)。
- 发送数据到 MCU,检查回显是否正常。
6. 常见问题解决
-
USB 设备未被识别:
- 检查时钟配置(必须生成精确的 48MHz USB 时钟)。
- 确认
PA11/PA12引脚连接正确,USB插座未损坏。 - 确保描述符配置正确(可通过 STM32CubeMX 重新生成)。
-
数据传输不稳定:
- 在 USB D+/D- 信号线上添加 22Ω 串联电阻。
- 缩短 USB 数据线长度,避免干扰。
-
驱动安装失败:
- 下载最新 STM32 VCP 驱动:STSW-STM32102。
7. 扩展功能
- 自定义 HID 设备:修改 USB 配置为 HID 类,实现键盘/鼠标功能。
- 大容量存储(MSC):挂载外部 Flash 或 SD 卡为 U 盘。
- USB 音频:传输音频数据流(需外部 DAC)。
通过以上步骤,可快速验证 STM32F103C8T6 的 USB 接口功能。如需完整代码或进一步调试,请参考 STM32CubeMX 生成的示例工程。
更多推荐



所有评论(0)