RCC(Reset and Clock Control)是STM32芯片系列中的一个重要模块,主要用于芯片的时钟与复位控制。在STM32的系统结构中,RCC模块常连接CPU、外设总线和其他重要的系统模块,如FLASH存储器和DMA控制器等,以保证整个系统的正常工作。
RCC模块所提供的时钟信号有多种类型,包括系统时钟(SYSCLK)、高速外设时钟(HCLK)、低速外设时钟(PCLK)等。另外,RCC模块还可以根据外部时钟源或内部时钟源进行配置,以满足不同的应用场合需要。
在STM32的时钟体系结构中,RCC模块作为一个核心的部分,主要控制时钟来源和分配。时钟源包括内部RC振荡器(HSI)、外部晶振(HSE)以及其他可选的外部时钟源。
根据不同的时钟源,RCC模块提供了多个时钟输出信号,包括PLL时钟、系统时钟(SYSCLOCK)、高速总线时钟(HCLK)、低速总线时钟(PCLK),以及其他外设时钟等。
在STM32中,时钟配置是一个相对比较复杂的过程,需要全面考虑系统的要求和外设的工作条件。RCC模块根据用户的配置需求,可以通过软件编程的方式来设置和控制时钟分频、时钟源选择、PLL锁相环的倍频系数等参数。
例如,在使用外部晶振(HSE)作为系统时钟时,需要设置时钟源为HSE,并开启HSE振荡器的驱动电路;在使用PLL时钟输出时,还需要设置PLL的倍频系数和输入时钟源等参数,以满足系统的时钟需求。
下面是一个简单的RCC模块配置示例,用于配置系统时钟为外部晶振(HSE),并且使用PLL时钟输出,将系统时钟分频得到72MHz的时钟频率。
首先,需要开启HSE晶振的驱动电路,并等待HSE稳定。代码如下:
RCC->CR |= RCC_CR_HSEON;while(!(RCC->CR & RCC_CR_HSERDY));
然后,选择HSE为PLL时钟输入源,设置PLL倍频系数和分频系数,启动PLL锁相环,并等待PLL稳定。代码如下:
RCC->CFGR |= RCC_CFGR_PLLSRC_HSE;RCC->CFGR |= RCC_CFGR_PLLMUL9;
RCC->CFGR |= RCC_CFGR_PLLDIV2;
RCC->CR |= RCC_CR_PLLON;
while(!(RCC->CR & RCC_CR_PLLRDY));
最后,将PLL时钟输出作为系统时钟,同时设置AHB、APB1和APB2时钟分频系数,以达到72MHz的系统时钟频率。代码如下:
RCC->CFGR |= RCC_CFGR_SW_PLL;while(!(RCC->CFGR & RCC_CFGR_SWS_PLL));
RCC->CFGR |= RCC_CFGR_HPRE_DIV1;
RCC->CFGR |= RCC_CFGR_PPRE1_DIV2;
RCC->CFGR |= RCC_CFGR_PPRE2_DIV1;