掌握STM32单片机时钟配置:时钟源和时钟树的深入解读
发布时间: 2024-07-05 01:33:52 阅读量: 124 订阅数: 49
《STM32单片机+DS1302时钟模块+OLED屏幕》源代码
5星 · 资源好评率100%
![掌握STM32单片机时钟配置:时钟源和时钟树的深入解读](https://img-blog.csdnimg.cn/1ab5ae04c5884932a838594a0562057f.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASk9VX1hRUw==,size_20,color_FFFFFF,t_70,g_se,x_16)
# 1. STM32单片机时钟系统概述
STM32单片机是一款功能强大的微控制器,其时钟系统是其核心组成部分。时钟系统负责为单片机提供稳定的时序信号,确保其内部电路和外围设备的正常运行。
STM32时钟系统采用分层结构,由时钟源、时钟树和时钟配置组成。时钟源为时钟系统提供原始时钟信号,时钟树将时钟信号分频或倍频后分配给不同的外围设备,时钟配置则负责设置时钟源和时钟树的参数,以满足不同的应用需求。
# 2. STM32时钟源的深入剖析
STM32微控制器提供多种时钟源,可用于为其内部外设和处理器提供时钟信号。这些时钟源可分为两类:外部时钟源和内部时钟源。
### 2.1 外部时钟源:HSE、LSE、LSI
外部时钟源是来自外部设备或信号的时钟信号。STM32支持三种外部时钟源:
- **HSE(高速外部时钟)**:HSE时钟源通常用于提供高精度的时钟信号。它可以连接到外部晶体振荡器或陶瓷谐振器,频率范围为4 MHz至25 MHz。
- **LSE(低速外部时钟)**:LSE时钟源通常用于提供低功耗的时钟信号。它可以连接到外部32.768 kHz晶体振荡器,用于实时时钟(RTC)和日历等低功耗应用。
- **LSI(内部低速时钟)**:LSI时钟源是STM32内部的一个RC振荡器,提供约40 kHz的时钟信号。它主要用于低功耗应用,例如唤醒定时器和看门狗定时器。
### 2.2 内部时钟源:HSI、MSI、LSI
内部时钟源是STM32内部生成的时钟信号。STM32支持三种内部时钟源:
- **HSI(高速内部时钟)**:HSI时钟源是一个RC振荡器,提供约8 MHz的时钟信号。它通常用于启动时钟系统,然后切换到更稳定的外部时钟源。
- **MSI(中速内部时钟)**:MSI时钟源是一个RC振荡器,提供约4 MHz的时钟信号。它可以作为HSI的备份时钟源,或者用于低功耗应用。
- **LSI(内部低速时钟)**:LSI时钟源是一个RC振荡器,提供约40 kHz的时钟信号。它主要用于低功耗应用,例如唤醒定时器和看门狗定时器。
**代码块:**
```c
// 配置HSE时钟源
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
```
**代码逻辑分析:**
此代码块配置HSE时钟源。它首先设置振荡器类型为HSE,然后启用HSE振荡器并设置预分频值为1。接下来,它启用PLL并将其源设置为HSE,将PLL乘法器设置为9,将PLL除法器设置为3。
**参数说明:**
- `RCC_OscInitTypeDef RCC_OscInitStruct`:用于配置振荡器的结构体。
- `RCC_OscInitStruct.OscillatorType`:要配置的振荡器类型。
- `RCC_OscInitStruct.HSEState`:H
0
0