zhyinch
2018-10-01 df3db0b978b1cab3555d6878a274b0f382bf707c
Ô´Âë/ºËÐİå/Src/OnChipDevices/Rcc_Nvic_Systick.c
@@ -1,50 +1,130 @@
#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 */
@@ -53,11 +133,7 @@
    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;
@@ -70,7 +146,7 @@
int Systick_Init(void)
{
   int time_retry = 500;
   if (SysTick_Config(64000))
   if (SysTick_Config(72000))
   {
        /* Capture error */
        while (time_retry--);
@@ -100,4 +176,4 @@
{  
    uint32_t i=1000*nTimer;  
    delay_us(i);  
}
}