使用HSE配置系统时钟
- 因为STM工程使用固件库,进入main函数时都已配置好时钟,所以我们自己编写时钟配置文件首先需要复位RCC寄存器!
- 使能HSE
- 判断HSE是否启动成功
- 使能预取指
- 设置FLASH等待周期
- 配置3条总线的倍频因子
- 配置锁相环,使能锁相环
- 等待锁相环稳定
- 选择锁相环输出为系统时钟,并等待其稳定
void HSE_sysclock_config( uint32_t RCC_PLLMul_x )
{
RCC_DeInit();
RCC_HSEConfig( RCC_HSE_ON );
if ( SUCCESS == RCC_WaitForHSEStartUp() )
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_x);
RCC_PLLCmd(ENABLE);
while ( RESET == RCC_GetFlagStatus(RCC_FLAG_PLLRDY) );
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while ( 0x08 != RCC_GetSYSCLKSource() );
}
else
{
}
}
使用HSI配置系统时钟
- 因为STM工程使用固件库,进入main函数时都已配置好时钟,所以我们自己编写时钟配置文件首先需要复位RCC寄存器!
- 使能HSI
- 判断HSI是否启动成功
- 使能预取指
- 设置FLASH等待周期
- 配置3条总线的倍频因子
- 配置锁相环,使能锁相环
- 等待锁相环稳定
- 选择锁相环输出为系统时钟,并等待其稳定
void HSI_sysclock_config( uint32_t RCC_PLLMul_x )
{
__IO uint32_t HSIStatus = 0;
RCC_DeInit();
RCC_HSICmd(ENABLE);
HSIStatus = RCC->CR & RCC_CR_HSIRDY;
if ( RCC_CR_HSIRDY == HSIStatus )
{
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_x);
RCC_PLLCmd(ENABLE);
while ( RESET == RCC_GetFlagStatus(RCC_FLAG_PLLRDY) );
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while ( 0x08 != RCC_GetSYSCLKSource() );
}
else
{
}
}