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

STM32学习笔记----时钟体系

STM32系列微控制器的时钟体系是其核心部分之一,负责为MCU(微控制单元)中的所有模块提供时基。时钟系统的配置对于系统的稳定性和性能至关重要。STM32的时钟系统涉及多个不同类型的时钟源和时钟树。下面将详细介绍STM32时钟体系的各个方面,特别是使用标准库进行配置时的一些要点。

1. STM32的时钟系统概述

STM32微控制器的时钟体系主要由以下几个部分组成:

  • 时钟源:用于产生时钟信号的硬件部分。STM32支持多种时钟源,包括内部时钟源和外部时钟源。
  • 时钟树:系统内部的时钟分配结构,将时钟从源传递到不同的模块。
  • 时钟配置:通过配置时钟源、分频器等来调整系统的时钟频率。

2. 时钟源

STM32微控制器提供了多个可选的时钟源,主要包括以下几种:

  • HSI(High-Speed Internal):高速内部时钟源,通常为8 MHz。在没有外部晶体的情况下,HSI是默认的时钟源。
  • HSE(High-Speed External):高速外部时钟源,可以连接外部晶体或谐振器,通常支持12 MHz或更高频率的时钟。
  • LSI(Low-Speed Internal):低速内部时钟源,通常为40 kHz,常用于看门狗定时器(IWDG)和RTC等低速模块。
  • LSE(Low-Speed External):低速外部时钟源,通常用于RTC等模块,连接外部32.768 kHz晶体。
  • PLL(Phase-Locked Loop):相位锁定环,通常用于倍频。STM32使用PLL将外部时钟(HSE或HSI)频率倍增,供给系统时钟。

3. 时钟树

STM32的时钟树是一种层次结构,涉及多个时钟源和分频器。主要的时钟树包括以下几个关键部分:

  • SYSCLK(系统时钟):系统主时钟,直接驱动内核。SYSCLK的频率通常由PLL输出。
  • AHB时钟:高级外设总线时钟,驱动例如DMA、存储器和其他高速外设。
  • APB时钟:外设总线时钟,分为APB1和APB2,分别用于不同的外设总线。APB1频率通常较低,而APB2频率较高。
  • HCLK:AHB总线时钟,通常与系统时钟同步,但可以通过分频器调整。
  • PCLK1 和 PCLK2:分别用于APB1和APB2总线,影响外设时钟。

4. 时钟配置和切换

STM32通过控制寄存器配置和切换时钟源。使用标准库时,通常通过如下方式进行时钟配置:

  1. RCC(Reset and Clock Control)寄存器:RCC用于控制和配置所有时钟相关的设置,包括时钟源的选择、PLL配置、时钟分频等。
  2. 时钟源的切换:可以通过RCC_CFGR寄存器来选择使用HSE、HSI、PLL等时钟源。
  3. PLL配置:通过配置PLL的倍频因子、输入时钟源等来调整系统时钟频率。
  4. 时钟分频:通过AHB、APB总线的分频器来控制各个模块的时钟频率。

5. 使用标准库配置时钟

在使用STM32的标准库时,时钟配置的步骤通常包括以下几个方面:

5.1 配置HSI和HSE时钟源
// 启用HSE外部时钟
RCC->CR |= RCC_CR_HSEON;
while(!(RCC->CR & RCC_CR_HSERDY)); // 等待HSE时钟准备好

// 配置PLL使用HSE作为输入时钟源
RCC->CFGR |= RCC_CFGR_PLLSRC_HSE; // 选择HSE作为PLL输入源
5.2 配置PLL倍频
// 配置PLL倍频因子,假设HSE为12 MHz,将PLL倍频至72 MHz
RCC->CFGR |= RCC_CFGR_PLLMUL9; // 选择PLL倍频因子9(12 MHz * 9 = 108 MHz)
5.3 配置系统时钟
// 选择PLL为系统时钟
RCC->CFGR |= RCC_CFGR_SW_PLL;  // 选择PLL为系统时钟源
while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL); // 等待PLL成为系统时钟源
5.4 配置AHB/APB时钟分频
// 配置AHB时钟(HCLK)为系统时钟的一半
RCC->CFGR |= RCC_CFGR_HPRE_DIV2; // 设置AHB时钟分频因子为2
// 配置APB1时钟(PCLK1)为AHB时钟的一半
RCC->CFGR |= RCC_CFGR_PPRE1_DIV2; // 设置APB1时钟分频因子为2

6. 时钟安全性

在STM32的时钟系统中,确保时钟的稳定性和安全性是非常重要的,特别是外部时钟源(HSE和LSE)。有几个关键的注意点:

  • 时钟源稳定性:HSE和LSE通常需要额外的晶体和电路支持以确保稳定性。在某些情况下,可能需要考虑使用内部时钟源(如HSI和LSI)来作为备份。
  • 时钟监控:STM32支持时钟监控功能,如通过RCC_CSR寄存器启用HSE和PLL失效检测。这样可以及时发现时钟源故障并进行处理。

7. 总结

STM32的时钟体系是一个复杂且高度可配置的系统,允许用户根据需求灵活选择不同的时钟源和配置参数。通过RCC寄存器进行配置,能够调整系统时钟频率、外设时钟、分频比等,以满足不同应用的需求。标准库提供了简化的接口,使得时钟配置变得更加方便。掌握STM32时钟体系的工作原理和配置方法,能够帮助开发者优化系统性能,确保系统的稳定运行。


http://www.kler.cn/a/396228.html

相关文章:

  • 11.13机器学习_线性回归
  • ADC输出码和输入电压转换关系
  • flutter字体大小切换案例 小字体,标准字体,大字体,超大字体案例
  • Vue3中一级导航栏的吸顶导航交互以及Pinia优化重复请求
  • 自由学习记录(22)
  • 生成式GPT商品推荐:精准满足用户需求
  • 第9章 DIV+CSS布局作业
  • AGI自学分享,简单有用的理论与实践
  • 【pandas】常用方法积累
  • OceanBase 升级过程研究(4.2.1.6-4.2.1.8)
  • 【CSS问题】margin塌陷
  • Hadoop 学习心得
  • 开源项目低代码表单设计器FcDesigner扩展自定义组件
  • Cadence安装
  • 跨域请求解决的核心
  • pytorch环境问题以及探索Dataloader的数据格式
  • MongoDB索引操作和执行计划Explain()详解
  • 课程管理|基于springboot+vue的在线课程管理系统(源码+数据库+文档)
  • unity3d————特殊文件夹
  • Go语言中的类型断言
  • Python连接Mysql、Postgre、ClickHouse、Redis常用库及封装方法
  • 嵌入式交叉编译:glib(未成功)
  • React状态管理之Redux
  • TVBox 网络接口
  • Go-RPC框架分层设计
  • AndroidStudio 获取 Git 提交次数和编译时间