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

MCU(一) 时钟详解 —— 以 GD32E103 时钟树结构为例

在这里插入图片描述
微控制器 (MCU) 的时钟系统是系统运行的核心,它提供了各模块所需的时钟信号。本文以 GD32E103 系列 MCU 为例,详细讲解其 时钟树结构(Clock Tree)。通过理解时钟源、分配与预分频器设置,可以灵活配置系统时钟以实现高性能与低功耗平衡。

因为最近发现纯软件实现的AI应用并没什么竞争力,或者说被抄袭的成本比较低,复制也比较简单,于是重新开始上课学习MCU,顺便记录一点东西
在前面的文章如何在资源受限例如1核和1G内存的设备上运行一个合适的向量存储库及如何优化 有简单测试了下可能性,后续我会慢慢实现,做一个只能的玩偶~

时钟源

GD32E103 支持多种时钟源,提供不同的频率和应用场景:

  1. HSI (High-Speed Internal)

    • 内部高速RC振荡器,频率为 8MHz
    • 默认的系统启动时钟源,启动速度快。
  2. HSE (High-Speed External)

    • 外部高速晶振(通常为 4~32MHz)。
    • 提供精确、稳定的时钟信号,适合对频率精度要求高的场景。
  3. LSI (Low-Speed Internal)

    • 内部低速RC振荡器,频率为 40kHz
    • 用于低功耗模式或独立的 RTC(实时时钟)功能。
  4. LSE (Low-Speed External)

    • 外部低速晶振(通常为 32.768kHz)。
    • 主要用于 RTC 的时间保持。
  5. PLL (Phase-Locked Loop)

    • 相位锁定环倍频器,支持输入时钟的多倍频输出。
    • 倍频后可生成高达 120MHz 的主系统时钟,适合高速运算场景。

时钟分配与分频

时钟源经过分配和分频器后被用于不同模块:

1. 系统时钟路径

  • 系统时钟(CK_SYS)通过多路选择器选择以下来源:
    • HSI
    • HSE
    • PLL 输出
  • GD32E103 的系统时钟最高支持 120MHz

2. 预分频器

系统时钟通过预分频器分配到不同总线和外设:

  • AHB(Advanced High-Performance Bus)

    • 主总线,连接 CPU、SRAM、DMA 等核心模块。
    • 最大频率:120MHz
  • APB1(Advanced Peripheral Bus 1)

    • 低速外设总线(如 USART、I2C、定时器等)。
    • 最大频率:60MHz
  • APB2(Advanced Peripheral Bus 2)

    • 高速外设总线(如 GPIO、SPI 等)。
    • 最大频率:120MHz

3. 外设分频器

部分外设的时钟需要进一步调整:

  • 定时器
    • 可直接使用倍频后的 PLL 时钟。
  • ADC 分频器
    • 降低时钟频率以满足 ADC 的 40MHz 输入限制。

特殊用途的时钟

  1. USB 时钟

    • USB 模块需要精确的 48MHz 时钟。
    • 由 PLL 倍频输出的专用通道生成,确保符合 USB 协议。
  2. RTC 时钟

    • RTC 可选择 LSELSI 或 HSE 的低频分频信号作为时钟源。
    • 支持低功耗时间保持功能。

时钟配置举例:生成 120MHz 系统时钟

以下是实现 120MHz 系统时钟的一般步骤:

  1. 选择 HSE 作为输入时钟

    • 假设外部晶振频率为 8MHz
    • 配置 PLLPRESEL = 1(选择 HSE)。
    • 配置 PREVDIVSEL = 1(无分频,直接进入 PLL)。
  2. 设置 PLL 倍频系数

    • 设置 PLLMF = 15
    • PLL 输出频率为:
      [
      8 , \text{MHz} \times 15 = 120 , \text{MHz}
      ]
  3. 配置系统时钟选择器

    • 将系统时钟选择器设置为 10,选择 PLL 输出作为系统时钟。

动态切换时钟源

GD32E103 支持在运行时通过控制信号动态切换时钟源:

  • 00:HSI
  • 01:HSE
  • 10:PLL

例如,当外部晶振失效时,系统可自动切换到内部 HSI,保障时钟连续性。


总结

GD32E103 的时钟树结构设计灵活,能满足多种应用场景:

  • 高速运算: 通过 PLL 提供高达 120MHz 的系统主频。
  • 低功耗模式: 支持低速 RC 振荡器 (LSI) 和低速晶振 (LSE)。
  • 外设优化: AHB、APB1、APB2 总线分频器实现不同频率的精确匹配。

理解时钟树结构和时钟配置方式是优化系统性能和功耗的关键。

做了一些个练习,几乎所有的控制一开始就需要设置时钟,而且用逻辑分析仪分析I2C等数据传输时,也有单独的时钟线。据我目前唤醒的记忆理解,时钟应该是一切行为的最小周期(至少数字或编程层面吧),而不同的时钟频率也就对应了不同的速率。某些电机的控制需要脉冲信号的,我记得大概一个脉冲某些个时钟周期内给出一个高电平的1信号


http://www.mrgr.cn/news/77973.html

相关文章:

  • 大语言模型---Llama模型文件介绍;文件组成
  • 瑞佑液晶控制芯片RA6807系列介绍 (三)软件代码详解 Part.10(让PNG图片动起来)完结篇
  • 大宗商品行业区块链应用
  • RFC 2526:Reserved IPv6 Subnet Anycast Addresses
  • Spring AI Alibaba-Chat Client
  • 机器学习周志华学习笔记-第6章<支持向量机>
  • C++设计模式-模板模式,Template Method
  • Vue 中 data 属性为函数的深度剖析:原理、区别与实践
  • aws服务--机密数据存储KMS(1)介绍和使用
  • 16:(标准库)ADC三:使用外部触发启动ADC/模拟看门狗
  • [OpenHarmony5.0][环境][教程]OpenHarmony 5.0源码在WSL2 Ubuntu22.04 编译环境搭建教程
  • C++设计模式-策略模式-StrategyMethod
  • 分割一切2.0,SAM2详解
  • 接口性能优化宝典:解决性能瓶颈的策略与实践
  • java 二分查找 方法 详解
  • 虚幻引擎---术语篇
  • 4.SynchronousMethodHandler
  • Spring Boot 动态数据源切换
  • 十一、排他思想、window、延时定时器、间歇函数、时间戳、location、navigator、history、本地存储localStorage
  • C++设计模式-享元模式
  • 安装 Docker(使用国内源)
  • 从0开始学PHP面向对象内容之常用设计模式(适配器,桥接,装饰器)
  • 大模型系列11-ray
  • 疑难Tips:NextCloud域名访问登录时卡住,显示违反内容安全策略
  • k8s网络服务
  • C#设计模式——抽象工厂模式(重点)