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

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(最低电压模式)通常用于 低功耗场景

    • 直接使用 HSI 和 HSI48,而不启用 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 的精度已经足够;如果遇到问题,可能需要调整时钟配置。

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

相关文章:

  • 使用 Scrapy 框架定制爬虫中间件接入淘宝 API 采集商品数据
  • 案例开发 - 日程管理 - 第三期
  • HOT100——链表篇Leetcode206. 反转链表
  • IP核乘法器NCO的使用
  • 多目标优化分解方法:加权和与罚函数边界交叉
  • 数据分析入门,深入浅出的数据分析
  • 基于 JWT 的登录验证功能实现详解
  • (多线程)等待一个线程-join() 获取当前线程的引用 线程的六种状态 线程休眠 线程的调度执行中的细节
  • 【边缘填充】——图像预处理(OpenCV)
  • 边缘计算+前端实时性:本地化数据处理在设备监控中的响应优化实践
  • MOEA/D(Multi-Objective Evolutionary Algorithm based on Decomposition)简介
  • 互信息:理论框架、跨学科应用与前沿进展
  • 从卷积到ResNet
  • Light Sci. Appl.:基于结构激发的方解石ghost极化激元红外光电子应用
  • flutter使用firebase集成谷歌,苹果登录
  • 什么是3DVR?VR技术有哪些应用场景?
  • 数学建模——蒙特卡罗法
  • 【优秀案例源码】劳务人力招聘平台系统
  • 深入理解单点登录(SSO
  • 第二十一天(shell俗称“脚本”的初学)练习答案见下一章
  • 完整复现cacti的RCE
  • 【C++进阶】---- 二叉搜索树
  • Pycaita二次开发基础代码解析:点距测量、对象层级关系与选择机制深度剖析
  • c++内联函数的执行原理,内联函数和宏函数的区别
  • Anaconda安装时的几个操作
  • Python动态规划:从基础到高阶优化的全面指南(2)
  • 洛谷 P1427 小鱼的数字游戏
  • 【Open3D】入门处理与实战之可视化及相关基本操作
  • 负载均衡算法中的加权随机算法
  • 数论1.01