问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于STM32F103C8T6的USB接口测试程序开发指南

创作时间:
作者:
@小白创作中心

基于STM32F103C8T6的USB接口测试程序开发指南

引用
CSDN
1.
https://m.blog.csdn.net/m0_52011717/article/details/145754262

本文将详细介绍如何基于STM32F103C8T6微控制器开发USB虚拟串口(CDC)测试程序。从硬件准备到软件实现,再到最终的测试步骤,本文将手把手教你完成整个开发过程。

硬件准备

  • STM32F103C8T6开发板(需支持USB,如Blue Pill核心板)。
  • USB接口:连接PA11 (D-)和PA12 (D+)到USB插座的D-/D+。
  • 外部晶振:确保使用8MHz外部晶振(USB需精确的48MHz时钟)。

开发环境配置

  • IDE:Keil MDK、STM32CubeIDE或PlatformIO。
  • 库支持:STM32CubeMX + HAL库(推荐)。

使用STM32CubeMX配置USB

  1. 时钟配置
  • HSE:8MHz外部晶振。
  • PLL配置:HSE → PLL ×9 → 72MHz系统时钟。
  • USB时钟:从PLL分频得到48MHz(需精确)。
  1. USB外设配置
  • 启用USB Device模式,选择CDC (Virtual COM Port)。
  • 自动生成描述符文件(usbd_cdc.c/h)。
  1. 生成代码
  • 生成初始化代码并导入到IDE。

关键代码实现

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中断驱动)
    }
}

发送数据到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);

接收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;
}

测试步骤

  1. 编译并烧录程序。
  2. 连接USB:通过USB线将开发板连接到PC。
  • 确保PA11 (D-)和PA12 (D+)正确连接。
  1. 驱动安装:
  • PC将识别为虚拟串口(如未自动安装,需手动安装STM32 CDC驱动)。
  1. 串口调试:
  • 使用PuTTY或串口助手打开虚拟串口(波特率可任意设置,CDC协议自适应)。
  • 发送数据到MCU,检查回显是否正常。

常见问题解决

  1. USB设备未被识别
  • 检查时钟配置(必须生成精确的48MHz USB时钟)。
  • 确认PA11/PA12引脚连接正确,USB插座未损坏。
  • 确保描述符配置正确(可通过STM32CubeMX重新生成)。
  1. 数据传输不稳定
  • 在USB D+/D-信号线上添加22Ω串联电阻。
  • 缩短USB数据线长度,避免干扰。
  1. 驱动安装失败
  • 下载最新STM32 VCP驱动:STSW-STM32102。

扩展功能

  • 自定义HID设备:修改USB配置为HID类,实现键盘/鼠标功能。
  • 大容量存储(MSC):挂载外部Flash或SD卡为U盘。
  • USB音频:传输音频数据流(需外部DAC)。

通过以上步骤,可快速验证STM32F103C8T6的USB接口功能。如需完整代码或进一步调试,请参考STM32CubeMX生成的示例工程。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号