热度 24
2013-7-30 12:17
10599 次阅读|
4 个评论
首先,必须屏弊掉库函数部分,因为此部分在启动文件中,先于main函数启动。 void SystemInit (void) { #if 0 /*! RCC system reset(for debug purpose) */ /*! Set HSION bit 复位值是83H 内部8M*/ RCC-CR |= (uint32_t)0x00000001; /*! Reset SW , HPRE , PPRE1 , PPRE2 , ADCPRE and MCO bits */ RCC-CFGR = (uint32_t)0xF8FF0000; /*! Reset HSEON, CSSON and PLLON bits */ RCC-CR = (uint32_t)0xFEF6FFFF; /*! Reset HSEBYP bit */ RCC-CR = (uint32_t)0xFFFBFFFF; /*! Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE bits */ RCC-CFGR = (uint32_t)0xFF80FFFF; /*! Disable all interrupts */ RCC-CIR = 0x00000000; /*! Configure the System clock frequency, HCLK, PCLK2 and PCLK1 prescalers */ /*! Configure the Flash Latency cycles and enable prefetch buffer */ SetSysClock(); #endif } 屏蔽上面函数后,配置时钟源: void RCC_Configuration(void) { RCC_DeInit(); RCC_HSICmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET) { } if(1) { FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); FLASH_SetLatency(FLASH_Latency_2); RCC_HCLKConfig(RCC_SYSCLK_Div1); //AHB时钟为系统时钟SYSCLK RCC_PCLK2Config(RCC_HCLK_Div1); //APB1时钟为HCLK/2,其中HCLK为AHB时钟 RCC_PCLK1Config(RCC_HCLK_Div2); //APB2时钟为HCLK //设置 PLL 时钟源及倍频系数 RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_2); //使能或者失能 PLL,这个参数可以取:ENABLE或者DISABLE RCC_PLLCmd(ENABLE);//如果PLL被用于系统时钟,那么它不能被失能 //等待指定的 RCC 标志位设置成功 等待PLL初始化成功 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { } //设置系统时钟(SYSCLK) 设置PLL为系统时钟源 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //等待PLL成功用作于系统时钟的时钟源 // 0x00:HSI 作为系统时钟 // 0x04:HSE作为系统时钟 // 0x08:PLL作为系统时钟 while(RCC_GetSYSCLKSource() != 0x08) { } } RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); // RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1 | RCC_APB1Periph_I2C2, ENABLE); // RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); } 然后在主函数调用就OK了。