游乐游手机版
首页/AI教程/文章详情

STM32F103C8T6 Blue Pill USB虚拟串口CDC移植教程

时间:2026-06-19 14:11
基于STM32F103C8T6(BluePill)和HAL库,通过CubeMX配置USBDevice为CDC类实现虚拟串口。需确保USB时钟精确48MHz,手动开启USB中断并修改接收回调函数以完成数据收发。一根USB线即可供电和通信,常见问题包括枚举失败、发送卡死等及解决方法。

先快速浏览一下整体方案:借助 STM32CubeMX 配置工具和 HAL 库,将 USB Device 配置为 CDC 类,从而实现虚拟串口功能。整个流程并不复杂,关键在于几个核心配置与代码细节,按步骤操作基本不会出错。

STM32F103C8T6(Blue Pill) 上移植 USB 虚拟串口(CDC)

一、硬件准备清单

项目 说明
MCU STM32F103C8T6
USB 引脚 PA11(DM)、PA12(DP)
上拉电阻 DP 需 1.5kΩ 上拉到 3.3V(多数开发板已集成)
晶振 8 MHz 外部晶振(必须使用)
Boot0 接地(0),从 Flash 启动

二、CubeMX 关键配置步骤

1、SYS 设置

Debug:Serial Wire Timebase Source:SysTick

2、RCC 配置

HSE:Crystal/Ceramic Resonator LSE:Disable

3、USB 外设

USB Device(FS) Class:Communication Device Class (CDC)

4、USB_DEVICE 中间件

Class:CDC USBD_CDC_APP:Enabled

5、时钟树配置

HSE = 8 MHz
PLL Source = HSE
PLL Mul = x9
SYSCLK = 72 MHz
USB Prescaler = PLLCLK / 1.5 = 48 MHz

特别注意:USB 时钟必须精确锁定 48 MHz,毫厘之差都会导致设备枚举失败——时钟不对,电脑完全无法识别。

三、生成代码后必须手动修改的地方

1、开启 USB 中断

CubeMX 有时会遗漏这一步,需要手动补充:

/* USER CODE BEGIN 2 */
HAL_NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
/* USER CODE END 2 */

2、CDC 接收回调函数(核心环节)

usbd_cdc_if.c 中找到以下回调函数,并在其中将接收到的数据转发出去:

static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{
  /* USER CODE BEGIN 6 */
  extern void USB_CDC_RxHandler(uint8_t *buf, uint32_t len);
  USB_CDC_RxHandler(Buf, *Len);
  USBD_CDC_ReceivePacket(&hUsbDeviceFS);
  return (USBD_OK);
  /* USER CODE END 6 */
}

3、自行封装接收处理函数

单独建立一个文件或在主循环中编写,用于处理接收到的数据:

/* usb_cdc.c */
#include "usbd_cdc_if.h"

void USB_CDC_RxHandler(uint8_t *buf, uint32_t len)
{
  if (len == 0) return;
  // 示例功能:原封不动返回(实现回显)
  CDC_Transmit_FS(buf, len);
}

4、发送函数封装

同样将发送接口封装一下,方便后续调用:

#include "usbd_cdc_if.h"

void USB_CDC_SendString(char *str)
{
  CDC_Transmit_FS((uint8_t*)str, strlen(str));
}

四、main.c 初始化流程

在主程序中调用 USB 初始化,之后就可以像操作普通串口一样收发数据:

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USB_DEVICE_Init(); // 初始化 USB CDC
  
  USB_CDC_SendString("STM32F103 USB CDC Ready!\r\n");
  while (1)
  {
    USB_CDC_SendString("Hello USB CDC\r\n");
    HAL_Delay(1000);
  }
}

五、PC 端现象验证

项目 结果
设备管理器 出现 COMx 端口
波特率 任意设置均可(实际被忽略)
串口工具 可正常收发数据
供电 直接由 USB 供电即可

完全无需额外购买 USB 转 TTL 模块,一根 USB 线即可同时完成供电与通信。

六、常见问题与排查方法

1. 电脑无法识别设备

请检查以下几个关键点:

  • 外部晶振是否为 8 MHz?
  • USB 时钟是否精确为 48 MHz?
  • PA11 / PA12 引脚是否被其他功能复用了?

2. 枚举失败或显示为未知设备

解决方案:

  • 更换一根质量合格的 USB 数据线(很多线仅支持充电,无法传输数据)
  • 在 PA11/PA12 上串联 22Ω 电阻
  • 尽量缩短 USB 线缆长度

3. 发送数据时程序卡死

根本原因在于上一次发送尚未完成,又立即调用了 CDC_Transmit_FS。简单的处理方式如下:

while (CDC_Transmit_FS(buf, len) != USBD_OK) {
  HAL_Delay(1);
}

4. 接收数据不完整

USB 单次传输最多只能携带 64 字节的数据包。如果需要一次性接收更长数据,必须在代码中自行实现拼包逻辑——使用环形缓冲区是最稳妥的方案。

七、进阶扩展

USB + printf 重定向

int _write(int fd, char *ptr, int len)
{
  CDC_Transmit_FS((uint8_t*)ptr, len);
  return len;
}

USB 与串口共存

用 USB 虚拟串口输出调试日志,USART1 则留给外设模块通信,分工明确。

USB + 上位机协议

设计自定义帧头与 CRC 校验,可进一步扩展实现 Bootloader 或参数配置功能。

八、工程级建议汇总

项目 建议
开发环境 CubeMX + HAL 库
调试顺序 先确保 USB 枚举成功
通信协议 包含长度字段与校验机制
实测速度 可达 800 Kbps
来源:https://developer.aliyun.com/article/1742324
上一篇多模态理解模型的Token消耗优化方法 下一篇包装运费尺寸接口开发实战详细教程
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
Windows Docker Desktop RabbitMQ生产级部署完整指南
AI教程 · 2026-06-29

Windows Docker Desktop RabbitMQ生产级部署完整指南

前言 在 Windows 本地开发环境中,直接安装 RabbitMQ 确实颇为周折:需要单独配置 Erlang 运行环境、手动管理环境变量、服务启停全凭手工操作。更令人困扰的是,版本兼容冲突、端口占用、环境不一致等问题层出不穷。笔者见过不少开发者为搭建环境就得耗费整整半天时间。 相比之下,借助 Do

AI搜索重构制造业采购逻辑的阿里云企业级GEOCMS优化实践
AI教程 · 2026-06-29

AI搜索重构制造业采购逻辑的阿里云企业级GEOCMS优化实践

先分享一个切实感受。过去两年,我们与福建制造企业合作较为频繁,发现一个非常突出的现象:超过80%的企业官网,产品参数仍然存放在PDF或图片中。AI爬虫?根本无法抓取。这些企业技术实力不弱、资质证照齐全、应用案例也丰富,但在AI搜索这一全新战场上,它们几乎处于隐身状态。 一、一个正在发生的行业变化 A

阿里云Token Plan团队版功能价格与省钱购买指南
AI教程 · 2026-06-29

阿里云Token Plan团队版功能价格与省钱购买指南

阿里云百炼近期推出了名为“Token Plan 团队版”的全新服务,这一服务专为企业与开发者量身打造,定位为AI大模型订阅平台。通过引入Credits作为统一计量单位,将文本生成、图像生成等多模态AI能力纳入单一计费体系,同时无缝兼容主流AI编程工具及智能体(Agent)生态系统。其核心亮点包括:全

阿里云物联网.NET Core客户端位置信息上报
AI教程 · 2026-06-29

阿里云物联网.NET Core客户端位置信息上报

阿里云物联网平台的位置服务并非一个完全独立的功能模块。位置信息可包含二维坐标与三维坐标,而位置数据的来源本质上是借助设备属性进行上传。换言之,若要让设备上报位置,您需先将其视为一个普通属性进行处理。 1)添加二维位置数据 操作过程十分简洁。进入数据分析 → 空间数据可视化 → 二维数据,点击添加,将

年阿里云服务器选型配置与网站部署全攻略
AI教程 · 2026-06-29

年阿里云服务器选型配置与网站部署全攻略

2026年,阿里云服务器生态已高度成熟,形成了清晰的轻量应用服务器与ECS云服务器两大产品阵营。无论你是计划搭建个人博客、企业官网,还是运营电商平台、进行应用开发,基本都能找到理想的解决方案。本指南将从服务器选型、配置选择、部署流程到安全运维,系统梳理2026年最实用的操作要点,帮助你少走弯路,让网