RCC_Configuration()解读代码
时间: 2023-07-26 19:05:58 浏览: 140
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总线时钟等进行了相关配置。