Stm32中USB 对时钟的要求

1. USB 对时钟的要求

USB 外设通常需要精确的 48MHz 时钟(全速 USB FS 模式),这个时钟可以由以下方式提供:

  • HSI48(内部 48MHz RC 振荡器)

  • PLL(锁相环,例如从 HSI/HSE 倍频得到 48MHz)

  • 外部晶振(HSE + PLL 分频/倍频)

如果你的 USB 驱动需要使用 内部 RC 振荡器 (而不是外部晶振),那么 HSI48 必须启用,否则 USB 无法正常工作。


2. 当前配置的分析

复制代码
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI48 | RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSI48State = RCC_HSI48_ON;  // 明确启用 HSI48
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; // 不使用 PLL
  • HSI48 被启用,说明 USB 可能依赖它。

  • PLL 被禁用 ,意味着 系统时钟(SYSCLK)不是来自 PLL ,而是直接使用 HSI(通常 16MHz 或更低)。

  • USB 时钟(48MHz)由 HSI48 直接提供,而不是通过 PLL 分频/倍频。


3. 为什么这样配置?

  • 低功耗设计

    • PWR_REGULATOR_VOLTAGE_SCALE3(最低电压模式)通常用于 低功耗场景

    • 直接使用 HSIHSI48,而不启用 PLL,可以减少动态功耗。

  • 简化时钟树

    • 如果 USB 只需要 48MHz,而 CPU 不需要高频运行,可以直接用 HSI48 供 USB 使用,HSI 供 CPU 使用,无需 PLL 参与。

4. 潜在问题

  • HSI48 精度较低

    • HSI48 是 内部 RC 振荡器,精度(通常 ±1%~2%)比外部晶振(±0.1%)差。

    • 如果 USB 通信不稳定(如枚举失败、数据传输错误),可能需要改用 外部晶振 + PLL 方案。

  • 系统时钟较低

    • 如果 SYSCLK 直接来自 HSI(例如 16MHz),CPU 性能可能受限。

5. 如何优化(如果需要)

如果 USB 需要更稳定的时钟或 CPU 需要更高性能,可以修改为:

复制代码
// 使用 HSE(外部晶振) + PLL 生成 48MHz 供 USB 使用
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = ...;  // 分频系数
RCC_OscInitStruct.PLL.PLLN = ...;  // 倍频系数(最终输出 48MHz)

结论

  • 当前配置适用于低功耗场景 ,且 USB 直接使用 HSI48 作为时钟源。

  • 如果 USB 通信不稳定 ,建议改用 外部晶振 + PLL 方案以提高精度。

  • 如果 CPU 需要更高性能 ,可以启用 PLL 提升 SYSCLK 频率(同时保持 USB 的 48MHz 时钟)。

如果你的 USB 驱动工作正常,说明 HSI48 的精度已经足够;如果遇到问题,可能需要调整时钟配置。

相关推荐
兆龙电子单片机设计21 分钟前
【STM32项目开源】STM32单片机语音分类垃圾桶-蓝牙APP
stm32·单片机·嵌入式硬件·物联网·开源·自动化·毕业设计
零涂毕业设计1 小时前
毕业设计模块开发-OLED显示屏(IIC协议0.96寸)STM32 ESP32 FPGA Linux驱动免费分享
linux·stm32·单片机·嵌入式·esp32·fpga·oled
阿龙的工作记录2 小时前
深入理解Linux设备驱动模型
linux·嵌入式硬件·工作记录
ye150127774553 小时前
220V转5V1A隔离芯片WT5602
单片机·嵌入式硬件·其他·硬件工程
武汉万象奥科3 小时前
AGV导航控制器方案 | 基于HD-RK3576系列核心板的算控融合一体化平台
arm开发·嵌入式硬件·arm核心板·单板机
ye150127774554 小时前
DC24V-100V转3.3V500mA隔离芯片WT5602
单片机·嵌入式硬件·其他·硬件工程
Lumos6fly4 小时前
51单片机从零到实战(15)——数字时钟温度计
单片机·嵌入式硬件·51单片机
gwf2164 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
zlinear数据采集卡6 小时前
从“脏信号”到“纳伏级纯净”:硬核拆解DABL7606的多级抗混叠滤波与24位过采样算法
arm开发·科技·嵌入式硬件·fpga开发·开源
放学校门口见7 小时前
vscode部署stm32开发调试环境
ide·vscode·stm32