基于stm32标准库的RCC模块部分功能详解

一、RCC模块简介

RCC(Reset and Clock Control)模块:是STM32微控制器中的一个关键模块,用于控制系统时钟和复位相关功能。RCC模块提供了对时钟源的配置、时钟分频、复位控制等功能,是嵌入式系统中重要的部分。

二、部分功能介绍

(一)、使能外设时钟

在使用外设模块之前,需要启用相应的外设时钟。RCC模块提供了一系列函数,例如 RCC_APB2PeriphClockCmdRCC_APB1PeriphClockCmd,用于启用或禁用外设时钟:

1、RCC_APB2PeriphClockCmd函数

RCC_APB2PeriphClockCmd 函数用于启用或禁用位于APB2总线上的外设的时钟。APB2(Advanced Peripheral Bus 2)是一个高性能总线,通常用于连接需要更高时钟频率的外设。

以下是一些常见的位于APB2总线上的外设:

  • USART1、USART2、USART3:串口通信外设。
  • SPI1、SPI2:串行外设接口。
  • TIM1、TIM8:高级定时器。
  • GPIOA、GPIOB、GPIOC、GPIOD、GPIOE:通用输入输出引脚控制器。

示例代码启用GPIOA外设时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);

这会告诉RCC模块启用GPIOA端口的时钟,从而允许CPU核心和其他外设模块访问和控制GPIOA引脚。

2、RCC_APB1PeriphClockCmd函数

RCC_APB1PeriphClockCmd 函数用于启用或禁用位于APB1总线上的外设的时钟。APB1(Advanced Peripheral Bus 1)是一个低功耗总线,通常用于连接低速外设。

以下是一些常见的位于APB1总线上的外设:

  • USART4、USART5:串口通信外设。
  • SPI3:串行外设接口。
  • TIM2、TIM3、TIM4、TIM5、TIM6、TIM7:基本定时器和通用定时器。
  • I2C1、I2C2:I2C总线控制器。

示例代码:禁用TIM6外设时钟:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, DISABLE);

这会告诉RCC模块禁用TIM6端口的时钟,从而禁止CPU核心和其他外设模块访问和控制TIM6引脚。

3、共同参数
RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
RCC_APB1PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
  • RCC_APB2Periph 参数指定要启用或禁用的外设,对于GPIOA来说,它是 RCC_APB2Periph_GPIOA
  • NewState 参数指定是启用 (ENABLE) 还是禁用 (DISABLE) 时钟。

(二)、复位控制

RCC模块管理复位信号,包括外部复位引脚、软件复位和复位状态监测。我们可以配置复位源,并使用RCC模块的函数执行软件复位操作。

RCC_DeInit();

这段代码通常用于重置或初始化与系统时钟和时钟控制相关的配置,以确保系统处于已知的状态。

(三)、配置时钟源切换

在某些情况下,您可能需要在运行时切换时钟源,例如从外部晶体振荡器(HSE)切换到HSI(High-Speed Internal oscillator,高速内部振荡器)或相反。这可以通过RCC模块的函数来实现,例如:

RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); // 切换系统时钟源到HSI

详细解释这个函数调用的不同部分:

  1. RCC_SYSCLKConfig():这是一个用于配置系统时钟的函数。它通常是由嵌入式系统的库或者微控制器厂家提供的函数。

  2. RCC_SYSCLKSource_HSI:这是一个枚举值,用于指定系统时钟的源。在这里,RCC_SYSCLKSource_HSI 表示选择了高速内部振荡器(HSI)作为系统时钟的源。HSI 是微控制器内部提供的一个高频振荡器,通常用于提供系统时钟。

根据不同的需求,选择不同时钟源:

  1. HSI(High-Speed Internal)时钟(默认时钟源):

    • HSI是内部高速时钟源,通常在8MHz的频率下运行。
    • 它是微控制器上电后的默认时钟源,在不需要高时钟精度的情况下使用。
    • HSI时钟源的优点:不需要外部元件,并且在上电后立即可用
    • 适用于大多数低功耗和一般用途应用,如LED控制、按钮输入等。
  2. HSE(High-Speed External)时钟

    • HSE时钟源是来自外部晶体振荡器的时钟,通常在4MHz到25MHz之间。
    • 它提供了更高的时钟精度和稳定性,适用于精确的定时和通信应用,例如,用于USART或SPI通信;还可以用于USB接口通信,因为USB需要精确的时钟同步。
    • 需要外部连接晶体振荡器,并在启动时稳定。
    • 需要配置RCC模块以启用HSE时钟源。
  3. PLL(Phase-Locked Loop)时钟

    • PLL时钟源是一种通过将HSE或HSI时钟源与分频器相结合来生成更高频率的时钟的方法。
    • 它允许您通过调整分频因子来获得所需的时钟频率。
    • 常用于需要高速时钟的应用,例如高速通信或高速定时;配置PLL时钟源以获得高速的系统时钟,以加速数据处理或图形渲染。
    • 在嵌入式图形界面应用程序中,可以使用PLL来实现平滑的动画效果。
    • 需要配置RCC模块以启用PLL时钟源。
  4. LSI(Low-Speed Internal)时钟

    • LSI时钟源是低速内部时钟,通常在40kHz的频率下运行。
    • 它用于低功耗模式和RTC(Real-Time Clock)的计数器。
    • 适用于需要长时间低功耗运行的应用。例如,传感器数据采集、监控系统等。
  5. LSE(Low-Speed External)时钟

    • LSE时钟源是外部低速时钟,通常使用32.768kHz的外部晶体振荡器。
    • 用于RTC和低功耗模式,通常在需要长时间计时的应用中使用。也可以作为传感器数据采集、监控系统等的时钟源。

ps:

多模式应用 - 切换时钟源

  • 在某些应用中,可能需要在不同模式之间切换时钟源以平衡性能和功耗。
  • 例如,一个移动设备可以在活动模式下使用PLL时钟源以提供高性能,然后在低功耗模式下切换到LSI或LSE时钟源以降低功耗

写在后面:

RCC模块的主要任务是配置和管理系统时钟、复位控制、外设时钟使能等功能。对于初学者,最主要的是RCC模块的外设时钟使能功能。

其他不常用的功能,我们可以在需要用到的时候再详细了解。

你可能感兴趣的:(STM32基础学习,stm32,嵌入式硬件,单片机)