Rcc_Configuration();
时间: 2023-11-07 19:04:18 浏览: 36
RCC_Configuration()函数是用来配置系统时钟设置和外设时钟使能的。在该函数中,首先会复位RCC并将其设置为缺省值,然后开启HSE作为PLL的时钟源。接下来,会检查HSE的启动状态,如果启动成功,则开启FLASH的预取功能,并配置HCLK、PCLK2、PCLK1和PLL的时钟分频。最后,将HSE倍频后作为系统时钟,并等待系统时钟源切换完成。
相关问题
RCC_Configuration
RCC_Configuration函数用于配置系统时钟设置和外设时钟使能。在该函数中,首先通过RCC_DeInit函数将RCC寄存器复位为缺省值,然后开启外部高速时钟HSE作为PLL的时钟源。接着使用RCC_WaitForHSEStartUp函数检查HSE时钟的启动状态,如果启动成功,则开启FLASH的预取功能,并配置HCLK、PCLK2、PCLK1以及PLL的倍频系数。最后通过RCC_SYSCLKConfig函数将系统时钟源设置为HSE,并使用RCC_GetSYSCLKSource函数检查是否将HSE倍频后作为系统时钟。
RCC_Configuration()解读代码
RCC(Reset and Clock Control)是STM32系列芯片中的一个模块,用于控制系统时钟和复位信号。RCC_Configuration()是一个函数,用于配置RCC模块的各个参数。
以下是该函数的代码解读:
```c
void RCC_Configuration(void)
{
/* Enable HSE */
RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 2 wait state */
FLASH_SetLatency(FLASH_Latency_2);
/* AHB = HCLK */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* APB1 = HCLK/2 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* APB2 = HCLK */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* Enable PLL */
RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
/* Select PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */
while (RCC_GetSYSCLKSource() != 0x08);
}
```
1. `RCC_HSEConfig(RCC_HSE_ON)`:使能外部高速时钟(HSE)。
2. `while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET)`:等待HSE稳定。
3. `FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable)`:使能Flash预取指缓存。
4. `FLASH_SetLatency(FLASH_Latency_2)`:设置Flash访问延迟为2个时钟周期。
5. `RCC_HCLKConfig(RCC_SYSCLK_Div1)`:设置AHB总线时钟(HCLK)为系统时钟(SYSCLK)的1分频。
6. `RCC_PCLK1Config(RCC_HCLK_Div2)`:设置APB1总线时钟(PCLK1)为HCLK的2分频。
7. `RCC_PCLK2Config(RCC_HCLK_Div1)`:设置APB2总线时钟(PCLK2)为HCLK的1分频。
8. `RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9)`:配置PLL时钟源为HSE,倍频因子为9,计算得到PLLCLK=8MHz*9=72MHz。
9. `RCC_PLLCmd(ENABLE)`:使能PLL。
10. `while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)`:等待PLL稳定。
11. `RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK)`:将PLLCLK作为系统时钟源。
12. `while (RCC_GetSYSCLKSource() != 0x08)`:等待PLLCLK成为系统时钟源。
总的来说,该函数的作用是将系统时钟设置为外部高速时钟经过PLL倍频后得到的72MHz,并对Flash预取指缓存、AHB总线时钟、APB1总线时钟、APB2总线时钟等进行了相关配置。