在基于STM32的3.5版本库函数的开发应用中,其时钟初始化函数SystemInit()函数是在启动文件中被调用的,而且其调用是在Main()函数之前,所以说,如果不打算修改其默认的系统时钟(sysclk72M,AHB 72M,PCLK1 36M,PCLK2 72M,PLL 72M),在main函数中可以不添加系统时钟初始化函数SystemInit()函数,其在相应的函数文件中已经被设置好了。
如果要对系统时钟进行重新设置,可以在main()函数中对其进行重新配置,也就回到了较早版本的ST开发库的应用之中,现举例如下:
1、以外部高速晶振为时钟源
void RCC_PLL_Configuration(void)
{
RCC_DeInit(); /*将外设RCC寄存器重设为缺省值 */
RCC_HSEConfig(RCC_HSE_ON); /*设置外部高速晶振(HSE) HSE晶振打开(ON)*/
if(RCC_WaitForHSEStartUp() == SUCCESS) { /*等待HSE起振, SUCCESS:HSE晶振稳定且就绪*/
RCC_HCLKConfig(RCC_SYSCLK_Div1); /*设置AHB时钟(HCLK) RCC_SYSCLK_Div1——AHB时钟 = 系统时*/
RCC_PCLK2Config(RCC_HCLK_Div1); /* 设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK*/
RCC_PCLK1Config(RCC_HCLK_Div2); /*设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK / 2*/
FLASH_SetLatency(FLASH_Latency_2); /*设置FLASH存储器延时时钟周期数FLASH_Latency_2 2延时周期*/
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /*选择FLASH预取指缓存的模,预取指缓存使能*/
RCC_PLLConfig(RCC_PLLSource_HSE_Div2, RCC_PLLMul_3);/*设置PLL时钟源及倍频系数*/
RCC_PLLCmd(ENABLE); /*使能PLL */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ; /*检查指定的RCC标志位(PLL准备好标志)设置与否*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /*设置系统时钟(SYSCLK) */
while(RCC_GetSYSCLKSource() != 0x08); /*0x08:PLL作为系统时钟 */
}
}
void RCC_HSI_Configuration(void){
RCC_DeInit(); /*将外设RCC寄存器重设为缺省值 */
RCC_HSICmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET);//等待HSI就绪
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
FLASH_SetLatency(FLASH_Latency_2);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
while(RCC_GetSYSCLKSource() != 0x00); /*0x00:HSI作为系统时钟 */
}