当前位置: 首页 > news >正文

【STM32】STM32H750 CubeMX 配置 USB CDC 虚拟串口笔记

一、前提条件

  • 芯片:STM32H750 (Cortex-M7)
  • 工具:STM32CubeMX + Keil / IAR / GCC
  • USB 外设:USB_OTG_FS (全速 12Mbps)
  • 关键条件:USB 时钟必须为 48 MHz

二、时钟配置 (SystemClock_Config)

USB 外设要求 精确的 48 MHz
CubeMX → Clock Configuration 里检查:

  • USB Clock Mux = 48 MHz

  • 在 时钟 配置中:

    • `USB选择 RC48输出48 MHz 给 USB_OTG_FS
  • ⚠️ 注意:如果时钟不是 48 MHz,USB 枚举会失败(设备可能直接无法被识别)。
    在这里插入图片描述


三、CubeMX 外设配置

1. USB_OTG_FS

  • Mode: Device_Only
  • Speed: Full Speed
    在这里插入图片描述

2. USB_DEVICE

在这里插入图片描述

四、关键宏参数配置(usbd_conf.h / usbd_cdc_if.c

参数说明推荐值注意事项
USBD_MAX_NUM_INTERFACES最大接口数2CDC 需要 1 控制 + 1 数据接口
USBD_MAX_NUM_CONFIGURATION最大配置数1单配置足够
USBD_MAX_STR_DESC_SIZ字符串描述符长度512足够放厂商/产品/序列号
USBD_SELF_POWERED自供电0(USB 供电)/ 1(外部电源)根据实际供电方式
USBD_DEBUG_LEVEL调试信息1发布时改回 0
USBD_LPM_ENABLED低功耗模式0禁用,避免兼容性问题
APP_RX_DATA_SIZECDC 接收缓冲区2048可按数据量调整
APP_TX_DATA_SIZECDC 发送缓冲区2048缓冲区过小会丢数据

五、USB_OTG_FS 配置参数详解

参数说明推荐配置注意事项
SpeedUSB 通信速度Full Speed (12 Mbps)H750 仅支持 FS,需 48MHz 时钟
Enable internal IP DMA内部 DMADisabled若启用需配置 DMA 中断,复杂应用才需要
Low power低功耗DisabledSuspend/Resume 场景下才用
Battery chargingUSB 充电协议Disabled需要硬件支持
Link Power Management (LPM)链路电源管理Disabled兼容性差
Use dedicated EP1 interrupt独立 EP1 中断Disabled默认全局中断足够
VBUS sensingVBUS 检测Enabled必须开启,否则无法检测插拔
Signal start of frameSOF 中断Disabled一般不需要

六、发送/接收数据接口

1. 发送数据

CubeMX 自动生成 CDC_Transmit_FS()

char msg[] = "Hello USB CDC!\r\n";
CDC_Transmit_FS((uint8_t*)msg, strlen(msg));

2. 接收数据

CubeMX 生成的 CDC_Receive_FS() (USB_DEVICE\App\usbd_cdc_if.c)回调:

uint8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
{// 这里处理接收到的数据CDC_Transmit_FS(Buf, *Len); // 回显return USBD_OK;
}

七、推荐的 usbPrintf 实现

为方便调试,可以写一个格式化打印函数:

#include <stdarg.h>
#include <stdio.h>void usbPrintf(const char *format, ...)
{va_list args;int length;va_start(args, format);length = vsnprintf((char *)UserTxBufferFS, APP_TX_DATA_SIZE, format, args);va_end(args);if (length > APP_TX_DATA_SIZE) {length = APP_TX_DATA_SIZE; // 避免溢出}// 等待直到发送成功while (CDC_Transmit_FS(UserTxBufferFS, length) == USBD_BUSY) {// 可以加个超时机制,避免死等}
}

八、常见问题排查

  1. 设备无法枚举 → 检查 USB 时钟是否为 48MHz,VBUS sensing 是否开启。
  2. 数据丢失 → 增大 APP_RX_DATA_SIZE / APP_TX_DATA_SIZE
  3. 死机 → 注意 CDC_Transmit_FS() 不能在中断里调用。
  4. 波特率设置无效 → CDC 虚拟串口不受串口助手波特率影响,它是 USB Bulk 传输。

📌 总结
CubeMX 下配置 H750 的 CDC 虚拟串口关键是 USB 时钟 48MHz接口数 2缓冲区足够大禁用 LPM/低功耗,这样配置后就能稳定实现虚拟串口通信。

http://www.dtcms.com/a/337328.html

相关文章:

  • 保姆级教学:使用 Jenkins 部署前端项目(2025 年最新版)
  • 基于JS实现的中国象棋AI系统:多模块协同决策与分析
  • ffmpeg编译
  • 音视频面试题集锦第 26 期
  • 计算机网络-IPv6
  • 679. 24 点游戏
  • Android Cutout(屏幕挖孔)详解
  • ubuntu 编译ffmpeg6.1 增加drawtext,libx264,libx265等
  • Leetcode 3648. Minimum Sensors to Cover Grid
  • OCR库pytesseract安装保姆级教程
  • LeetCode:无重复字符的最长子串
  • SQLite 加密与不加密性能对比与优化实践
  • Opsqueue:为重负载而生的轻量级批处理队列,已开源!
  • 视频因为264问题无法网页播放,解决方案之一:转化视频
  • 智创飞跃|2025 Google 开发者大会伴你成长精进
  • 兴趣爱好——虾哥开源小智AI机器人搭建(丐版—最低成本)ESP32开发板 MicroPython V1.0.0 Rev1
  • 嵌入式Linux学习 -- 进程和线程4
  • 三高架构杂谈
  • Ansible 自动化运维实践笔记:Jinja2 模板、LNMP+WordPress 部署与大项目管理
  • 飞算JavaAI智慧校园场景实践:从校园管理到师生服务的全链路技术革新
  • 【C++✨】多种 C++ 解法固定宽度右对齐输出(每个数占 8 列)
  • 常见的光源频闪控制方式
  • GitHub 热榜项目 - 日榜(2025-08-18)
  • 为什么有些相机“即插即用”,而有些则需要采集卡?
  • 联动无影(TscanPlus)送激活码
  • 短剧小程序系统开发:推动短剧行业规范化与标准化发展
  • 【计算机网络】TCP/IP
  • 决策树简单实战
  • 【github-action 如何为github action设置secrets/environment】
  • 《软件工程导论》实验报告六 设计建模工具的使用(二)