Board logo

标题: 系统时钟初始化及配制方法 [打印本页]

作者: yuyang911220    时间: 2014-7-22 18:17     标题: 系统时钟初始化及配制方法

系统时钟系统初始化重要函数:
        SystemInit();
         使用V3.5版本的库函数,该函数在系统启动之后会自动调用:
         startup_stm32f10x_xx.s文件中:
            ; Reset handler
            Reset_Handler   PROC
                 EXPORT  Reset_Handler             [WEAK]
                 IMPORT  __main
                 IMPORT  SystemInit
                 LDR     R0, =SystemInit
                 BLX     R0               
                 LDR     R0, =__main
                 BX      R0
                 ENDP
初始化之前首先通过宏定义定义系统时钟频率:
     #define SYSCLK_FREQ_72MHz  72000000
初始化之后的状态:
     SYSCLK         72MHz
     AHB            72MHz
     PCLK1          36MHz
     PCLK2          72MHz
     PLL            72MHz
初始化之后可以通过变量SystemCoreClock获取系统变量。如果
    SYSCLK=72MHz,那么变量SystemCoreClock=72000000。

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作为系统时钟 */
}




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0