| | |
| | | #include "Rcc_Nvic_Systick.h" |
| | | |
| | | void Rcc_Init(void) |
| | | //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 |
| | | // |
| | | //} |
| | | int RCC_Configuration(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ä½ä¸ºç³»ç»æ¶é |
| | | ErrorStatus HSEStartUpStatus; |
| | | RCC_ClocksTypeDef RCC_ClockFreq; |
| | | |
| | | // //----------使ç¨å¤é¨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 |
| | | |
| | | /* RCC system reset(for debug purpose) */ |
| | | RCC_DeInit(); |
| | | |
| | | /* Enable HSE */ |
| | | RCC_HSEConfig(RCC_HSE_ON); |
| | | |
| | | /* Wait till HSE is ready */ |
| | | HSEStartUpStatus = RCC_WaitForHSEStartUp(); |
| | | |
| | | if(HSEStartUpStatus != ERROR) |
| | | { |
| | | SystemInit(); |
| | | /* Enable Prefetch Buffer */ |
| | | FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); |
| | | |
| | | /****************************************************************/ |
| | | /* HSE= up to 25MHz (on EVB1000 is 12MHz), |
| | | * HCLK=72MHz, PCLK2=72MHz, PCLK1=36MHz */ |
| | | /****************************************************************/ |
| | | /* Flash 2 wait state */ |
| | | FLASH_SetLatency(FLASH_Latency_2); |
| | | /* HCLK = SYSCLK */ |
| | | RCC_HCLKConfig(RCC_SYSCLK_Div1); |
| | | /* PCLK2 = HCLK */ |
| | | RCC_PCLK2Config(RCC_HCLK_Div1); |
| | | /* PCLK1 = HCLK/2 */ |
| | | RCC_PCLK1Config(RCC_HCLK_Div2); |
| | | /* ADCCLK = PCLK2/4 */ |
| | | RCC_ADCCLKConfig(RCC_PCLK2_Div6); |
| | | } |
| | | // /* Configure PLLs *********************************************************/ |
| | | // /* PLL2 configuration: PLL2CLK = (HSE / 4) * 8 = 24 MHz */ |
| | | // RCC_PREDIV2Config(RCC_PREDIV2_Div4); |
| | | // RCC_PLL2Config(RCC_PLL2Mul_8); |
| | | |
| | | // /* Enable PLL2 */ |
| | | // RCC_PLL2Cmd(ENABLE); |
| | | |
| | | // /* Wait till PLL2 is ready */ |
| | | // while (RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET){} |
| | | |
| | | // /* PLL1 configuration: PLLCLK = (PLL2 / 3) * 9 = 72 MHz */ |
| | | // RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div3); |
| | | |
| | | // RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9); |
| | | |
| | | // /* Enable PLL */ |
| | | // RCC_PLLCmd(ENABLE); |
| | | |
| | | // /* Wait till PLL is ready */ |
| | | // while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET){} |
| | | |
| | | // /* Select PLL as system clock source */ |
| | | // RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); |
| | | |
| | | // /* Wait till PLL is used as system clock source */ |
| | | // while (RCC_GetSYSCLKSource() != 0x08){} |
| | | // } |
| | | |
| | | RCC_GetClocksFreq(&RCC_ClockFreq); |
| | | |
| | | /* Enable SPI1 clock */ |
| | | RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); |
| | | |
| | | /* Enable SPI2 clock */ |
| | | RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); |
| | | |
| | | /* Enable GPIOs clocks */ |
| | | RCC_APB2PeriphClockCmd( |
| | | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | |
| | | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | |
| | | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, |
| | | ENABLE); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | void Nvic_Init(void) |
| | | { |
| | | NVIC_InitTypeDef NVIC_InitStructure; |
| | | EXTI_InitTypeDef EXTI_InitStructure; |
| | | |
| | | NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); |
| | | |
| | | /* Enable and set EXTI Interrupt to the lowest priority */ |
| | |
| | | NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; |
| | | NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; |
| | | |
| | | EXTI_InitStructure.EXTI_Line = EXTI_Line17; |
| | | EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; |
| | | EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; |
| | | EXTI_InitStructure.EXTI_LineCmd = ENABLE; |
| | | EXTI_Init(&EXTI_InitStructure); |
| | | |
| | | |
| | | NVIC_InitStructure.NVIC_IRQChannel = RTCAlarm_IRQn; |
| | | NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; |
| | |
| | | int Systick_Init(void) |
| | | { |
| | | int time_retry = 500; |
| | | if (SysTick_Config(64000)) |
| | | if (SysTick_Config(72000)) |
| | | { |
| | | /* Capture error */ |
| | | while (time_retry--); |
| | |
| | | { |
| | | uint32_t i=1000*nTimer; |
| | | delay_us(i); |
| | | } |
| | | } |