#include "Rcc_Nvic_Systick.h" void Rcc_Init(void) { //----------ʹÓÃÄÚ²¿RC¾§ÕñHSI 64MHz----------- RCC_DeInit(); //½«ÍâÉèRCC¼Ä´æÆ÷ÖØÉèΪȱʡֵ RCC_HSICmd(ENABLE); //ÄÚ²¿Ê±ÖÓʹÄÜ while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET); //µÈ´ýHSI¾ÍÐ÷ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Ñ¡ÔñFLASHԤȡָ»º´æµÄÄ£,Ԥȡָ»º´æÊ¹ÄÜ FLASH_SetLatency(FLASH_Latency_2); //ÉèÖÃFLASH´æ´¢Æ÷ÑÓʱʱÖÓÖÜÆÚÊýFLASH_Latency_2 2ÑÓʱÖÜÆÚ 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 RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16); //ÉèÖÃPLLʱÖÓÔ´¼°±¶ÆµÏµÊý£¬ÆµÂÊΪ8/2*16=64Mhz 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×÷ΪϵͳʱÖÓ // //----------ʹÓÃÍⲿRC¾§Õñ 72MHz----------- // RCC_DeInit(); //³õʼ»¯ÎªÈ±Ê¡Öµ // RCC_HSEConfig(RCC_HSE_ON); //ʹÄÜÍⲿµÄ¸ßËÙʱÖÓ // while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //µÈ´ýÍⲿ¸ßËÙʱÖÓʹÄܾÍÐ÷ // // FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer // FLASH_SetLatency(FLASH_Latency_2); //Flash 2 wait state // // RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK // RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK // RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2 // RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ // RCC_PLLCmd(ENABLE); //Enable PLLCLK // // while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready // RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock // while(RCC_GetSYSCLKSource()!=0x08); //Wait till PLL is used as system clock source } void Nvic_Init(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); /* Enable and set EXTI Interrupt to the lowest priority */ NVIC_InitStructure.NVIC_IRQChannel = DECAIRQ_EXTI_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 15; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } int Systick_Init(void) { int time_retry = 500; if (SysTick_Config(64000)) { /* Capture error */ while (time_retry--); return 1; } NVIC_SetPriority(SysTick_IRQn, 5); return 0; } void delay_us(uint32_t nTimer) { uint32_t i=0; for(i=0;i