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时钟源
cpp 复制代码
// 启用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倍频
cpp 复制代码
// 配置PLL倍频因子,假设HSE为12 MHz,将PLL倍频至72 MHz
RCC->CFGR |= RCC_CFGR_PLLMUL9; // 选择PLL倍频因子9(12 MHz * 9 = 108 MHz)
5.3 配置系统时钟
cpp 复制代码
// 选择PLL为系统时钟
RCC->CFGR |= RCC_CFGR_SW_PLL;  // 选择PLL为系统时钟源
while ((RCC->CFGR & RCC_CFGR_SWS) != RCC_CFGR_SWS_PLL); // 等待PLL成为系统时钟源
5.4 配置AHB/APB时钟分频
cpp 复制代码
// 配置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时钟体系的工作原理和配置方法,能够帮助开发者优化系统性能,确保系统的稳定运行。

相关推荐
hazy1k20 小时前
51单片机基础-GPIO结构详解
stm32·单片机·嵌入式硬件·51单片机
集和诚JHCTECH20 小时前
专为严苛环境而生:高防护等级工业防水平板WPPC-H1520T(P)
人工智能·嵌入式硬件·平板
m0_7482480220 小时前
C++与C#布尔类型深度解析:从语言设计到跨平台互操作
c++·stm32·c#
lingggggaaaa20 小时前
小迪安全v2023学习笔记(一百四十五讲)—— Webshell篇&魔改冰蝎&打乱特征指纹&新增加密协议&过后门查杀&过流量识别
笔记·学习·安全·魔改冰蝎·免杀对抗·免杀技术
Digitally21 小时前
如何将iPhone上的笔记传输到电脑
笔记·电脑·iphone
落羽的落羽21 小时前
【C++】现代C++的新特性constexpr,及其在C++14、C++17、C++20中的进化
linux·c++·人工智能·学习·机器学习·c++20·c++40周年
小苏兮21 小时前
【把Linux“聊”明白】编译器gcc/g++与调试器gdb/cgdb:从编译原理到高效调试
java·linux·运维·学习·1024程序员节
im_AMBER21 小时前
React 11 登录页项目框架搭建
前端·学习·react.js·前端框架
辰哥单片机设计1 天前
STM32项目分享:智能水产养殖系统
stm32·单片机·嵌入式硬件
一枝小雨1 天前
【OTA专题】2 初级bootloader架构和基础工程移植
stm32·单片机·嵌入式·ota·bootloader·固件升级·加密升级