STM32 微控制器库RCC_OscInitTypeDef结构参数介绍

news/2025/2/28 6:39:26/

目录

    • 1. 结构体定义
    • 2. 结构体成员说明
      • (1) `OscillatorType`
      • (2) `HSEState`
      • (3) `LSEState`
      • (4) `HSIState`
      • (5) `HSICalibrationValue`
      • (6) `LSIState`
      • (7) `PLL`
    • 3. 使用步骤
      • (1) 定义结构体
      • (2) 配置结构体成员
      • (3) 调用 HAL 初始化函数
    • 4. 示例代码
    • 5. 注意事项
      • (1) 时钟源的选择
      • (2) 校准值
      • (3) 时钟配置的先后顺序
      • (4) HAL 库版本
    • 6. 总结


RCC_OscInitTypeDef 是 STM32 微控制器固件库(如标准外设库或 HAL 库)中用于配置振荡器(Oscillator)的结构体。它定义了系统时钟的源(如 HSI、HSE、PLL 等)以及相关的配置参数。


1. 结构体定义

在 STM32 HAL 库中,RCC_OscInitTypeDef 结构体的定义如下:

typedef struct
{uint32_t OscillatorType;         // 需要配置的振荡器类型uint32_t HSEState;               // 外部高速时钟状态uint32_t LSEState;               // 外部低速时钟状态uint32_t HSIState;               // 内部高速时钟状态uint32_t HSICalibrationValue;    // 内部高速时钟校准值uint32_t LSIState;               // 内部低速时钟状态RCC_PLLInitTypeDef PLL;          // 锁相环配置
} RCC_OscInitTypeDef;

2. 结构体成员说明

(1) OscillatorType

  • 类型uint32_t

  • 说明:指定需要配置的振荡器类型,可以是以下值的组合:

    • RCC_OSCILLATORTYPE_HSE:外部高速时钟(HSE)。
    • RCC_OSCILLATORTYPE_LSE:外部低速时钟(LSE)。
    • RCC_OSCILLATORTYPE_HSI:内部高速时钟(HSI)。
    • RCC_OSCILLATORTYPE_LSI:内部低速时钟(LSI)。
    • RCC_OSCILLATORTYPE_MSI:内部多速时钟(MSI,用于某些 STM32 系列)。
    • RCC_OSCILLATORTYPE_HSI48:内部 48 MHz 时钟(HSI48,用于 USB 等外设)。

    例如:

    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI;
    

(2) HSEState

  • 类型uint32_t
  • 说明:指定外部高速时钟(HSE)的状态,常用值包括:
    • RCC_HSE_ON:使能 HSE。
    • RCC_HSE_OFF:关闭 HSE。
    • RCC_HSE_BYPASS:HSE 通过外部时钟源(如晶振)绕过。

(3) LSEState

  • 类型uint32_t
  • 说明:指定外部低速时钟(LSE)的状态,常用值包括:
    • RCC_LSE_ON:使能 LSE。
    • RCC_LSE_OFF:关闭 LSE。
    • RCC_LSE_BYPASS:LSE 通过外部时钟源绕过。

(4) HSIState

  • 类型uint32_t
  • 说明:指定内部高速时钟(HSI)的状态,常用值包括:
    • RCC_HSI_ON:使能 HSI。
    • RCC_HSI_OFF:关闭 HSI。
    • RCC_HSI_DIV1:HSI 不分频。
    • RCC_HSI_DIV2:HSI 2 分频。

(5) HSICalibrationValue

  • 类型uint32_t
  • 说明:校准内部高速时钟(HSI)的精度,范围通常为 0 到 15。

(6) LSIState

  • 类型uint32_t
  • 说明:指定内部低速时钟(LSI)的状态,常用值包括:
    • RCC_LSI_ON:使能 LSI。
    • RCC_LSI_OFF:关闭 LSI。

(7) PLL

  • 类型RCC_PLLInitTypeDef
  • 说明:配置锁相环(PLL)的参数,包括:
    • PLLState:PLL 的状态(RCC_PLL_ONRCC_PLL_OFF)。
    • PLLSource:PLL 的时钟源(如 RCC_PLLSOURCE_HSERCC_PLLSOURCE_HSI)。
    • PLLM:PLL 的 M 分频器(输入分频)。
    • PLLN:PLL 的 N 倍频器(倍频)。
    • PLLP:PLL 的 P 分频器(输出分频)。
    • PLLQ:PLL 的 Q 分频器(输出分频,用于 USB 等外设)。
    • PLLR:PLL 的 R 分频器(输出分频,用于 STM32F4 及以上)。

3. 使用步骤

(1) 定义结构体

RCC_OscInitTypeDef RCC_OscInitStruct;

(2) 配置结构体成员

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;  // 配置 HSE
RCC_OscInitStruct.HSEState = RCC_HSE_ON;                    // 使能 HSE
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;                // 使能 PLL
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;        // PLL 源为 HSE
RCC_OscInitStruct.PLL.PLLM = 8;                             // 8 分频
RCC_OscInitStruct.PLL.PLLN = 336;                           // 336 倍频
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;                 // PLLP 2 分频
RCC_OscInitStruct.PLL.PLLQ = 7;                             // PLLQ 7 分频

(3) 调用 HAL 初始化函数

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{// 初始化失败处理while (1);
}

4. 示例代码

以下是一个完整的配置示例,假设使用 HSE 作为时钟源,并配置 PLL:

void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};// 配置 HSE 和 PLLRCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;                    // 使能 HSERCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;                // 使能 PLLRCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;        // PLL 源为 HSERCC_OscInitStruct.PLL.PLLM = 8;                             // 8 分频RCC_OscInitStruct.PLL.PLLN = 336;                           // 336 倍频RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;                 // PLLP 2 分频RCC_OscInitStruct.PLL.PLLQ = 7;                             // PLLQ 7 分频if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){// 初始化失败处理while (1);}// 配置系统时钟为 PLL 输出__HAL_RCC_SYSCLK_CONFIG(RCC_SYSCLKSOURCE_PLLCLK);
}

5. 注意事项

(1) 时钟源的选择

  • 如果使用 HSE 作为时钟源,确保外部晶振已正确连接。
  • 如果使用 PLL,需配置 PLL 的倍频和分频参数,确保输出频率在芯片支持的范围内。

(2) 校准值

  • 内部时钟(如 HSI)可以通过 HSICalibrationValue 进行校准,以提高精度。

(3) 时钟配置的先后顺序

  • 通常先配置振荡器(如 HSE、HSI、PLL),然后再配置系统时钟源。

(4) HAL 库版本

  • 不同版本的 HAL 库可能在结构体成员和宏定义上有所不同,根据实际使用的 HAL 库版本调整代码。

6. 总结

RCC_OscInitTypeDef 是用于配置 STM32 振荡器(Oscillator)的核心结构体,包含以下关键参数:

  • 振荡器类型:如 HSE、HSI、LSE、LSI。
  • 振荡器状态:如使能或禁用。
  • PLL 配置:包括时钟源、倍频、分频等。

http://www.ppmy.cn/news/1575433.html

相关文章

RuntimeWarning: invalid value encountered in scalar power在进行标量的幂运算时遇到了无效值

year_profit ((profit / initial_cash) ** (1 / yy) - 1) * 100 RuntimeWarning: invalid value encountered in scalar power 这个警告表示在执行标量幂运算 ((profit / initial_cash) ** (1 / yy) - 1) * 100 时遇到了无效值。常见的引发原因及解决办法如下: ###…

WPF12-MVVM

目录 1. 什么是MVVM2. 实现简单MVVM2.1. Part 12.2. Part 2 1. 什么是MVVM MVVM 是 Model-View-ViewModel 的缩写,是一种用于构建用户界面的设计模式,是一种简化用户界面的事件驱动编程方式。 MVVM 的目标是实现用户界面和业务逻辑之间的彻底分离&…

DeepSeek中的MLA技术

大模型推理的两个阶段:prefill和decode prefill阶段处理整个输入序列,并生成第一个输出token,并初始化KV cachedecode阶段则逐个生成后续的tokens KV cache 无KV cache的推理过程:每次生成新token时,需要将整个历史序列…

专题一和为s的两个数字

1.题目 题目分析: 在给定的数组中,找到俩个数字,且这两个数字的和与给定的target相等就行,可能会有很多组,但只要返回一组就可以。 2.算法原理 方法一: 暴力枚举法,通过俩层循环,…

【QT】QLinearGradient 线性渐变类简单使用教程

目录 0.简介 1)qtDesigner中 2)实际执行 1.功能详述 3.举一反三的样式 0.简介 QLinearGradient 是 Qt 框架中的一个类,用于定义线性渐变效果(通过样式表设置)。它可以用来填充形状、背景或其他图形元素&#xff0…

零基础学习OpenGL(一)创建一个窗口

基于 ubuntu 系统,设置基础环境。 #!/usr/bin/env bashsudo apt-get update# 安装基础编译软件 sudo apt-get -y install gcc g cmake git# 安装编译 glfw 依赖的软件 sudo apt-get -y install libwayland-dev libx11-dev libxcursor-dev libxi-dev libxinerama-de…

矩阵碰一碰发视频之 API 接口接入技术开发全解析,支持OEM

矩阵碰一碰发视频作为一种创新的视频分享方式,为用户带来了便捷且独特的体验。而在这一功能的实现过程中,API 接口接入扮演着至关重要的角色。通过接入合适的 API,能够高效地实现视频数据的传输、设备间的通信以及用户交互等功能。本文将深入…

第二十二天 学习HarmonyOS的分布式软总线技术,了解跨设备通信的原理

前言 在万物互联时代,跨设备协同成为智能生态系统的核心需求。HarmonyOS通过创新的分布式软总线技术,实现了设备间的高效通信与资源共享。本文将从零开始,带领开发者深入理解这项核心技术,通过代码实战演示如何构建跨设备应用。我…