当前位置: 首页 > 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.lryc.cn/news/624703.html

相关文章:

  • ThinkPHP的安装运行和调试
  • MCP协议演进:从SSE到Streamable HTTP的技术革命
  • SAP ABAP IS SUPPLIED
  • 【语法糖】什么是语法糖
  • Java+Vue构建资产设备管理系统,适配移动端与后台管理,实现全生命周期管理,涵盖采购、入库、使用、维护、报废等环节,提供完整源码,便于二次开发
  • 快速搭建项目(若依)
  • CentOS 7 LAMP快速部署WordPress指南
  • linux中的hostpath卷、nfs卷以及静态持久卷的区别
  • python+flask后端开发~项目实战 | 博客问答项目--数据库信息的基本配置与UserModel的创建,映射,关联
  • 【MySQL】超详细入门学习
  • Linux 系统(如 Ubuntu / CentOS)阿里云虚拟机(ECS)上部署 Bitnami LAMP
  • 【Python】Python Socket 网络编程详解:从基础到实践​
  • 云原生俱乐部-mysql知识点归纳(1)
  • 【前端面试题】JavaScript 核心知识点解析(第十四题解析到第二十二题)
  • 【牛客刷题】正六边形阴影面积计算
  • FastRTSP介绍
  • 微电网管控系统中python多线程缓存与SQLite多数据库文件连接池实践总结(含源码)
  • 多台服务器批量发布arcgisserver服务并缓存切片
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频内容理解与智能预警升级(401)
  • Python入门Day18:模块与包(module package)
  • Spring Boot + Spring Kafka 集成
  • SMTPman,smtp ssl助力安全高效邮件传输!
  • Java 中表示数据集的常用集合类
  • 低端设备加载webp ANR
  • 安全存储之 SAES+HUK 使用技巧和常见问题 LAT1543
  • Rust 教程之简介000
  • CSS:水平垂直居中
  • 【银河麒麟桌面系统】配置匿名文件夹与用户认证共享服务
  • 2025年秋招Java后端面试场景题+八股文题目
  • AI 推荐系统云端部署实战:基于亚马逊云科技免费资源的工程实现